home *** CD-ROM | disk | FTP | other *** search
/ Night Owl 6 / Night Owl's Shareware - PDSI-006 - Night Owl Corp (1990).iso / 008a / intr26a.zip / INTERRUP.B < prev    next >
Text File  |  1991-06-15  |  226KB  |  6,031 lines

  1. Interrupt List, part 2 of 5
  2. This compilation is Copyright (c) 1989,1990,1991 Ralf Brown
  3. ----------1500-------------------------------
  4. INT 15 - CASSETTE - TURN ON TAPE DRIVE'S MOTOR (PC and PCjr only)
  5.     AH = 00h
  6. Return: CF set on error
  7.         AH = 86h no cassette present
  8.     CF clear if successful
  9. SeeAlso: AH=01h"CASSETTE"
  10. ----------1500-------------------------------
  11. INT 15 - Amstrad PC1512 - GET AND RESET MOUSE COUNTS
  12.     AH = 00h
  13. Return: CX = signed X count
  14.     DX = signed Y count
  15. ----------1500-------------------------------
  16. INT 15 - VMiX v2+ - INSTALLATION CHECK???
  17.     AH = 00h
  18. Return: DX = 0798h???
  19. ----------1500-------------------------------
  20. INT 15 - MultiDOS Plus - GIVE UP TIME SLICE
  21.     AH = 00h
  22. Note:    if issued by the highest-priority task while MultiDOS is using
  23.       priority-based rather than round-robin scheduling, control will be
  24.       returned to the caller immediately
  25. SeeAlso: AH=03h"MultiDOS",AX=1000h
  26. ----------1501-------------------------------
  27. INT 15 - CASSETTE - TURN OFF TAPE DRIVE'S MOTOR (PC and PCjr only)
  28.     AH = 01h
  29. Return: CF set on error
  30.         AH = 86h no cassette present
  31.     CF clear if successful
  32. SeeAlso: AH=00h"CASSETTE"
  33. ----------1501-------------------------------
  34. INT 15 - Amstrad PC1512 - WRITE DATA TO NON-VOLATILE RAM
  35.     AH = 01h
  36.     AL = NVRAM location (00h to 3Fh)
  37.     BL = NVRAM data value
  38. Return: AH = return code
  39.         00h OK
  40.         01h address bad
  41.         02h write error
  42. SeeAlso: AH=02h"Amstrad"
  43.  
  44. Format of NVRAM:
  45. Offset    Size    Description
  46.  00h    BYTE    time of day: seconds
  47.  01h    BYTE    alarm time: seconds
  48.  02h    BYTE    time of day: minutes
  49.  03h    BYTE    alarm time: minutes
  50.  04h    BYTE    time of day: hours
  51.  05h    BYTE    alarm time: hours
  52.  06h    BYTE    day of week, 1 = Sunday
  53.  07h    BYTE    day of month
  54.  08h    BYTE    month
  55.  09h    BYTE    year mod 100
  56.  0Ah    BYTE    RTC status register A
  57.         bit 7: set if date/time being updated
  58.             6-4: time base speed, default 010 = 32768 Hz
  59.             3-0: interrupt rate selection, default 0110 = 1024 Hz
  60.  0Bh    BYTE    RTC status register B
  61.         bit 7: clear if normal update, set if abort update
  62.             6: periodic interrupt enable
  63.             5: alarm interrupt enable
  64.             4: update end interrupt enable
  65.             3: square wave enable
  66.             2: date mode (clear = BCD, set = binary)
  67.             1: 24-hour format
  68.             0: daylight saving time enable
  69.  0Ch    BYTE    RTC status register C (read-only)
  70.         bit 7: IRQF flag
  71.             6: PF flag
  72.             5: AF flag
  73.             4: UF flag
  74.  0Dh    BYTE    RTC status register D
  75.         bit 7: battery good
  76.  0Eh  6 BYTEs    time and date machine last used
  77.  14h    BYTE    user RAM checksum
  78.  15h    WORD    Enter key scancode/ASCII code
  79.  17h    WORD    Forward delete key scancode/ASCII code
  80.  19h    WORD    Joystick fire button 1 scancode/ASCII code
  81.  1Bh    WORD    Joystick fire button 2 scancode/ASCII code
  82.  1Dh    WORD    mouse button 1 scancode/ASCII code
  83.  1Fh    WORD    mouse button 2 scancode/ASCII code
  84.  21h    BYTE    mouse X scaling factor
  85.  22h    BYTE    mouse Y scaling factor
  86.  23h    BYTE    initial VDU mode and drive count
  87.  24h    BYTE    initial VDU character attribute
  88.  25h    BYTE    size of RAM disk in 2K blocks
  89.  26h    BYTE    initial system UART setup byte
  90.  27h    BYTE    initial external UART setup byte
  91.  28h 24 BYTEs    available for user application
  92. Note:    bytes 00h-0Dh are the same on the IBM AT as they are used/updated by
  93.       the clock chip
  94. ----------1501-------------------------------
  95. INT 15 - VMiX - I/O CHANNEL OBJECT MANAGER
  96.     AH = 01h
  97.     STACK: WORD  object ID of requestor
  98.            DWORD pointer to name of requested method
  99.            WORD  arg1
  100.            WORD  arg2
  101.            WORD  arg3
  102.            WORD  arg4
  103. Return: DX:AX??? -> IRP structure or 0000h:0000h 
  104. ----------1501-------------------------------
  105. INT 15 - MultiDOS Plus - REQUEST RESOURCE SEMAPHORE
  106.     AH = 01h
  107.     AL = semaphore number (00h-3Fh)
  108. Return: AH = status
  109.         00h successful
  110.         02h invalid semaphore number
  111. Notes:    if the semaphore is not owned, ownership is assigned to the calling
  112.       task and the call returns immediately
  113.     if the semaphore is already owned by another task, the calling task
  114.       is placed on a queue for the semaphore and suspended until it can
  115.       become owner of the semaphore
  116.     semaphore 0 is used internally by MultiDOS to synchronize DOS access
  117. SeeAlso: AH=02h"MultiDOS",AH=10h"MultiDOS",AH=1Bh"MultiDOS"
  118. ----------1502-------------------------------
  119. INT 15 - CASSETTE - READ DATA
  120.     AH = 02h
  121.     CX = number of bytes to read
  122.     ES:BX -> buffer
  123. Return:    CF clear if successful
  124.         DX = number of bytes read
  125.         ES:BX -> byte following last byte read
  126.     CF set on error
  127.     AH = status
  128.         00h successful
  129.         01h CRC error
  130.         02h bad tape signals
  131.         04h no data
  132.         80h invalid command
  133.         86h no cassette present
  134. SeeAlso: AH=00h"CASSETTE",AH=03h"CASSETTE"
  135. ----------1502-------------------------------
  136. INT 15 - Amstrad PC1512 - READ DATA FROM NON-VOLATILE RAM
  137.     AH = 02h
  138.     AL = NVRAM location (00h to 3Fh)
  139. Return: AH = return code
  140.         00h OK
  141.         01h address bad
  142.         02h checksum error
  143.     AL = NVRAM data value
  144. SeeAlso: AH=01h"Amstrad"
  145. ----------1502-------------------------------
  146. INT 15 - VMiX - MEMORY OBJECT MANAGER
  147.     AH = 02h
  148.     STACK:    WORD    object ID of requestor
  149.         DWORD    pointer to name of requested method
  150.         WORD    arg1
  151.         WORD    arg2
  152.         WORD    arg3
  153.         WORD    arg4
  154.         WORD    arg5
  155. Return: DX:AX??? = pointer to memory block
  156. ----------1502-------------------------------
  157. INT 15 - MultiDOS Plus - RELEASE RESOURCE SEMAPHORE
  158.     AH = 02h
  159.     AL = semaphore number (00h-3Fh)
  160. Return: AH = status
  161.         00h successful
  162.         01h not semaphore owner
  163.         02h invalid semaphore number
  164. Notes:    if any tasks are waiting for the semaphore, the first task on the wait
  165.       queue will become the new owner and be reawakened
  166.     do not use within an interrupt handler
  167. SeeAlso: AH=01h"MultiDOS",AH=10h"MultiDOS",AH=1Ch"MultiDOS"
  168. ----------1503-------------------------------
  169. INT 15 - CASSETTE - WRITE DATA (PC and PCjr only)
  170.     AH = 03h
  171.     CX = number of bytes to write
  172.     ES:BX -> data buffer
  173. Return: CF clear if successful
  174.         ES:BX -> byte following last byte written
  175.     CF set on error
  176.     AH = status (see AH=02h"CASSETTE")
  177.     CX = 0000h
  178. SeeAlso: AH=00h"CASSETTE",AH=02h"CASSETTE"
  179. ----------1503-------------------------------
  180. INT 15 - Amstrad PC1512 - WRITE VDU COLOR PLANE WRITE REGISTER
  181.     AH = 03h
  182.     AL = value (I,R,G,B bits)
  183. SeeAlso: AH=04h"Amstrad"
  184. ----------1503-------------------------------
  185. INT 15 - VMiX - PROMPTED CONSOLE INPUT
  186.     AH = 03h
  187.     STACK:    DWORD    pointer to ASCII prompt
  188.         WORD    field outline character
  189.         WORD    length of input field
  190.         DWORD    address of pointer to input buffer
  191.         WORD    number of characters input
  192. Return: AX = length of input (input buffer is padded with blanks)
  193. ----------1503-------------------------------
  194. INT 15 - MultiDOS Plus - SUSPEND TASK FOR INTERVAL
  195.     AH = 03h
  196.     DX = number of time slices to remain suspended
  197. Return: after specified interval has elapsed
  198. Note:    when priority-based scheduling is in use, high-priority tasks should
  199.       use this function to yield the processor
  200. SeeAlso: AH=00h"MultiDOS",AH=0Ah"MultiDOS"
  201. ----------1504-------------------------------
  202. INT 15 - SYSTEM - BUILD ABIOS SYSTEM PARAMETER TABLE (PS)
  203.     AH = 04h
  204.     ES:DI -> results buffer length 20h for System Parameter Table
  205.     DS = segment containing ABIOS RAM extensions (zero if none)
  206. Return: AH = 00h success: results at ES:DI
  207.     CF set on failure
  208. SeeAlso: AH=05h"ABIOS",C1h
  209.  
  210. Format of ABIOS System Parameter Table:
  211. Offset    Size    Description
  212.  00h    DWORD    FAR address of ABIOS Common Start Routine
  213.  04h    DWORD    FAR address of ABIOS Interrupt Routine
  214.  08h    DWORD    FAR address of ABIOS Time-out Routine
  215.  0Ch    WORD    number of bytes of stack required by this ABIOS implementation
  216.  0Eh 16 BYTEs    reserved
  217.  1Eh    WORD    number of entries in initialization table
  218. ----------1504-------------------------------
  219. INT 15 - Amstrad PC1512 - WRITE VDU COLOR PLANE READ REGISTER
  220.     AH = 04h
  221.     AL = value (RDSEL1 and RDSEL0)
  222. SeeAlso: AH=03h"Amstrad",05h"Amstrad"
  223. ----------1504-------------------------------
  224. INT 15 - VMiX - VPRINTF
  225.     AH = 04h
  226.     STACK:    DWORD    control string
  227.         DWORD    array of arguments
  228. ----------1504-------------------------------
  229. INT 15 - MultiDOS Plus - SEND MESSAGE TO ANOTHER TASK
  230.     AH = 04h
  231.     AL = mailbox number (00h-3Fh)
  232.     CX = message length in bytes
  233.     DS:SI -> message
  234. Return: AH = status
  235.         00h successful
  236.         01h out of message memory
  237.         02h invalid mailbox number
  238. Note:    the message is copied into a system buffer; the caller may immediately
  239.       reuse its buffer
  240. SeeAlso: AH=05h"MultiDOS"
  241. ----------1505-------------------------------
  242. INT 15 - SYSTEM - BUILD ABIOS INITIALIZATION TABLE (PS)
  243.     AH = 05h
  244.     ES:DI -> results buffer length (18h * Number_of_Entries)
  245.     DS = segment containing ABIOS RAM extensions (zero if none)
  246. Return: AH = 00h success: results at ES:DI
  247.     CF set on failure
  248. SeeAlso: AH=04h"ABIOS",C1h
  249.  
  250. Format of one entry of ABIOS Initialization Table:
  251. Offset    Size    Description
  252.  00h    WORD    device ID
  253.  02h    WORD    number of Logical IDs
  254.  04h    WORD    Device Block length (zero for ABIOS patch or extension)
  255.  06h    DWORD    -> init routine for Device Block and Function Transfer Table
  256.  0Ah    WORD    request block length
  257.  0Ch    WORD    Function Transfer Table length (zero for a patch)
  258.  0Eh    WORD    Data Pointers length (in Common Data Area)
  259.  10h    BYTE    secondary device ID (hardware level this ABIOS ver supports)
  260.  11h    BYTE    revision (device driver revision level this ABIOS supports)
  261.  12h  6 BYTEs    reserved
  262. ----------1505-------------------------------
  263. INT 15 - Amstrad PC1512 - WRITE VDU GRAPHICS BORDER REGISTER
  264.     AH = 05h
  265.     AL = value (I,R,G,B bits)
  266. SeeAlso: AH=04h"Amstrad"
  267. ----------1505-------------------------------
  268. INT 15 - VMiX - GET PROCESS ID OF CURRENT PROCESS
  269.     AH = 05h
  270. Return: AX = process ID
  271. SeeAlso: AH=06h"VMiX",AH=0Bh"VMiX"
  272. ----------1505-------------------------------
  273. INT 15 - MultiDOS Plus - CHECK MAILBOX
  274.     AH = 05h
  275.     AL = mailbox number (00h-3Fh)
  276. Return: AH = status
  277.         00h successful
  278.             DX = length of first message in queue, 0000h if no message
  279.         02h invalid mailbox number
  280. SeeAlso: AH=04h"MultiDOS",AH=06h"MultiDOS"
  281. ----------1506-------------------------------
  282. INT 15 - Amstrad PC1512 - GET ROS VERSION NUMBER
  283.     AH = 06h
  284. Return: BX = version number
  285. ----------1506-------------------------------
  286. INT 15 - VMiX - GET POINTER TO PROCESS CONTROL BLOCK
  287.     AH = 06h
  288.     STACK:    WORD    process ID
  289. Return: DX:AX??? -> process control block
  290. SeeAlso: AH=07h"VMiX",AH=08h"VMiX"
  291. ----------1506-------------------------------
  292. INT 15 - MultiDOS Plus - READ MAILBOX
  293.     AH = 06h
  294.     AL = mailbox number (00h-3Fh)
  295.     CX = size of buffer in bytes
  296.     ES:DI -> buffer for message
  297. Return: AH = status
  298.         00h successful
  299.             CX = number of bytes copied
  300.         DX = actual length of message
  301.         02h invalid mailbox number
  302. Note:    if the caller's buffer is not large enough, the message is truncated
  303.       and the remainder is lost
  304. SeeAlso: AH=04h"MultiDOS",AH=05h"MultiDOS"
  305. ----------1507-------------------------------
  306. INT 15 - VMiX - GET POINTER TO OBJECT CONTROL BLOCK
  307.     AH = 07h
  308.     STACK:    WORD    object type
  309. Return: DX:AX??? -> object control block
  310. SeeAlso: AH=06h"VMiX",AH=08h"VMiX"
  311. ----------1507-------------------------------
  312. INT 15 - MultiDOS Plus - SPAWN INTERNAL TASK (CREATE NEW THREAD)
  313.     AH = 07h
  314.     BX:CX = entry point of new task
  315.     DX = stack size in paragraphs
  316. Return: AH = status
  317.         00h successful
  318.         01h no free task control blocks
  319.         02h no free memory for task's stack
  320. Note:    execution returns immediately to calling task
  321. SeeAlso: AH=08h"MultiDOS",AH=09h"MultiDOS",AH=13h"MultiDOS"
  322. ----------1508-------------------------------
  323. INT 15 - VMiX - GET CHANNEL CONTROL BLOCK
  324.     AH = 08h
  325.     STACK:    WORD    channel ID
  326. Return: DX:AX??? -> channel control block
  327. SeeAlso: AH=06h"VMiX",AH=07h"VMiX"
  328. ----------1508-------------------------------
  329. INT 15 - MultiDOS Plus - TERMINATE INTERNAL TASK (KILL THREAD)
  330.     AH = 08h
  331. Return: calling task terminated, so execution never returns to caller
  332. Notes:    an internal task must be terminated with this function rather than a
  333.       DOS termination function
  334.     task's stack space is returned to parent task's memory pool
  335. SeeAlso: AH=07h"MultiDOS"
  336. ----------1509-------------------------------
  337. INT 15 - VMiX - GET ID OF QUEUED ELEMENT
  338.     AH = 09h
  339.     STACK:    WORD    queue ID (0 = process queue, 1 = object, 3 = type)
  340.         WORD    subqueue ID
  341. Return: AX = ID
  342. SeeAlso: AH=0Ah"VMiX"
  343. ----------1509-------------------------------
  344. INT 15 - MultiDOS Plus - CHANGE TASK'S PRIORITY
  345.     AH = 09h
  346.     AL = new priority
  347. Note:    the priority has different meanings depending on whether priority-
  348.       based or round-robin scheduling is used
  349. SeeAlso: AH=07h"MultiDOS"
  350. ----------150A-------------------------------
  351. INT 15 - VMiX - GET ID OF NEXT QUEUED ELEMENT
  352.     AH = 0Ah
  353.     STACK:    WORD    queue ID (0 = process queue, 1 = object, 3 = type)
  354.         WORD    ID of current element in queue chain
  355. Return: AX = ID of next element
  356. SeeAlso: AH=09h"VMiX",AH=0Fh"VMiX"
  357. ----------150A-------------------------------
  358. INT 15 - MultiDOS Plus - CHANGE TIME SLICE INTERVAL
  359.     AH = 0Ah
  360.     AL = new interval
  361.         00h = 55.0 ms (default)
  362.         80h = 27.5 ms
  363.         40h = 13.75 ms
  364.         20h = 6.88 ms
  365.         10h = 3.44 ms
  366.         08h = 1.72 ms
  367. SeeAlso: AH=03h"MultiDOS"
  368. ----------150B-------------------------------
  369. INT 15 - VMiX - GET TOTAL NUMBER OF ACTIVE PROCESSES
  370.     AH = 0Bh
  371. Return: AX = number of active processes
  372. SeeAlso: AH=05h"VMiX",AH=0Eh"VMiX"
  373. ----------150B-------------------------------
  374. INT 15 - MultiDOS Plus - FORCE DISPLAY OUTPUT TO PHYSICAL SCREEN MEMORY
  375.     AH = 0Bh
  376. Notes:    sets calling task's screen pointer to actual screen memory; the pointer
  377.       may be restored with AH=0Ch
  378.     caller's video mode must be same as foreground task's video mode
  379.     any text written while in the background will be saved to the
  380.       foreground task's virtual screen when it switches to the background
  381.     useful if a background task wants to display a message on the
  382.       foreground screen
  383. SeeAlso: AH=0Ch"MultiDOS"
  384. ----------150C-------------------------------
  385. INT 15 - VMiX - GET POINTER TO PROCESS TSS STACK
  386.     AH = 0Ch
  387.     STACK:    WORD    process ID
  388. Return: DX:AX??? -> TSS stack store
  389. ----------150C-------------------------------
  390. INT 15 - MultiDOS Plus - RESTORE OLD VIDEO DISPLAY MEMORY
  391.     AH = 0Ch
  392. Note:    restores task's screen pointer saved by AH=0Bh; must not be called
  393.       unless AH=0Bh has been called first
  394. SeeAlso: AH=0Bh"MultiDOS"
  395. ----------150D-------------------------------
  396. INT 15 - VMiX - START A CHILD PROCESS JOB SHELL
  397.     AH = 0Dh
  398.     STACK:    DWORD    ASCIZ string starting with requested I/O channel and
  399.             followed by standard VMiX shell command string
  400. Return: AX = status
  401. SeeAlso: AH=0Eh"VMIX"
  402. ----------150D-------------------------------
  403. INT 15 - MultiDOS Plus - DISABLE MULTITASKING
  404.     AH = 0Dh
  405. Note:    calling task receives all time slices until AH=0Eh is called; this
  406.       allows time-critical events or nonreentrant code to be processed
  407. SeeAlso: AH=0Eh"MultiDOS",AH=10h"MultiDOS",AX=101Bh,AH=20h"MultiDOS"
  408. ----------150E-------------------------------
  409. INT 15 - VMiX - TERMINATE PROCESS
  410.     AH = 0Eh
  411.     STACK:    WORD    process ID
  412. Return: AX = status
  413. SeeAlso: AH=0Bh"VMiX",AH=0Dh"VMIX"
  414. ----------150E-------------------------------
  415. INT 15 - MultiDOS Plus - ENABLE MULTITASKING
  416.     AH = 0Eh
  417. SeeAlso: AH=0Dh"MultiDOS",AX=101Ch,AH=20h"MultiDOS"
  418. ----------150F-------------------------------
  419. INT 15 - SYSTEM - FORMAT UNIT PERIODIC INTERRUPT (PS ESDI drives only)
  420.     AH = 0Fh
  421.     AL = phase code
  422.         00h reserved
  423.         01h surface analysis
  424.         02h formatting
  425. Return: CF clear if formatting should continue, set if it should terminate
  426. Note:    called during ESDI drive formatting after each cylinder is completed
  427. SeeAlso: INT 13/AH=1Ah
  428. ----------150F-------------------------------
  429. INT 15 - VMiX - GET KEY FIELD OF QUEUED ELEMENT
  430.     AH = 0Fh
  431.     STACK:    WORD    queue ID (0 = process queue, 1 = object q, 3 = type q)
  432.         WORD    ID of element in queue chain
  433. Return: AX = key
  434. SeeAlso: AH=0Ah"VMiX"
  435. ----------150F-------------------------------
  436. INT 15 - MultiDOS Plus - EXECUTE A MULTIDOS PLUS COMMAND
  437.     AH = 0Fh
  438.     DS:BX -> ASCIZ command
  439. Return: after command has been processed
  440. Notes:    specified string is executed as if it had been typed at the MultiDOS
  441.       command prompt
  442.     the task is placed on a queue which MultiDOS examines periodically and
  443.       is suspended until MultiDOS has processed the command
  444.     all lowercase characters up to the first blank are converted to upper
  445.       case within the given buffer
  446. ----------1510-------------------------------
  447. INT 15 - VMiX - EXECUTE FUNCTION IN PROTECTED MODE
  448.     AH = 10h
  449.     STACK:    DWORD    pointer to function
  450.           N    WORDs    function args
  451. Return: ???
  452. ----------1510-------------------------------
  453. INT 15 - MultiDOS Plus - TEST RESOURCE SEMAPHORE
  454.     AH = 10h
  455.     AL = semaphore number (00h-3Fh)
  456. Return: AH = status
  457.         00h semaphore not in use
  458.         01h semaphore owned by another task
  459.         02h invalid semaphore number
  460.         03h semaphore owned by caller
  461. SeeAlso: AH=02h"MultiDOS",AH=0Dh"MultiDOS",AH=1Dh"MultiDOS"
  462. ----------151000-----------------------------
  463. INT 15 - TopView - "PAUSE" - GIVE UP CPU TIME
  464.     AX = 1000h
  465. Return: after other processes run
  466. Note:    under DESQview, if the process issuing this call has hooked INT 08h,
  467.       the current time-slice is set to expire at the next clock tick rather
  468.       than immediately
  469. SeeAlso: AH=00h"MultiDOS",INT 21/AH=EEh"DoubleDOS",INT 2F/AX=1680h
  470. SeeAlso: INT 7F/AH=E8h
  471. ----------151001-----------------------------
  472. INT 15 - TopView - "GETMEM" - ALLOCATE "SYSTEM" MEMORY
  473.     AX = 1001h
  474.     BX = number of bytes to allocate
  475. Return: ES:DI -> block of memory or 0000h:0000h (DV 2.26+)
  476. Note:    use SETERROR (AX=DE15h) to avoid a user prompt if there is insufficient
  477.       common memory
  478. SeeAlso: AX=1002h,AX=DE0Ch,AX=DE15h
  479. ----------151002-----------------------------
  480. INT 15 - TopView - "PUTMEM" - DEALLOCATE "SYSTEM" MEMORY
  481.     AX = 1002h
  482.     ES:DI -> previously allocated block
  483. Return: block freed
  484. SeeAlso: AX=1001h,AX=DE0Dh
  485. ----------151003-----------------------------
  486. INT 15 - TopView - "PRINTC" - DISPLAY CHARACTER/ATTRIBUTE ON SCREEN
  487.     AX = 1003h
  488.     BH = attribute
  489.     BL = character
  490.     DX = segment of object handle for window
  491. Note:    BX=0 does not display anything, it only positions the hardware cursor
  492. ----------1510-------------------------------
  493. INT 15 - TopView - UNIMPLEMENTED IN DV 2.x
  494.     AH = 10h
  495.     AL = 04h thru 12h
  496. Return: pops up "Programming error" window in DV 2.x
  497. ----------151013-----------------------------
  498. INT 15 - TopView - "GETBIT" - DEFINE A 2ND-LEVEL INTERRUPT HANDLER
  499.     AX = 1013h
  500.     ES:DI -> FAR service routine
  501. Return: BX = bit mask indicating which bit was allocated
  502.          0000h if no more bits available
  503. SeeAlso: AX=1014h,AX=1015h
  504. Note:    only a few TopView/DESQview API calls are allowed during a hardware
  505.       interrupt; if other calls need to be made, the interrupt handler
  506.       must schedule a 2nd-level interrupt with "SETBIT" (AX=1015h)
  507. ----------151014-----------------------------
  508. INT 15 - TopView - "FREEBIT" - UNDEFINE A 2ND-LEVEL INTERRUPT HANDLER
  509.     AX = 1014h
  510.     BX = bit mask from INT 15/AX=1013h
  511. SeeAlso: AX=1013h,AX=1015h
  512. ----------151015-----------------------------
  513. INT 15 - TopView - "SETBIT" - SCHEDULE ONE OR MORE 2ND-LEVEL INTERRUPTS
  514.     AX = 1015h
  515.     BX = bit mask for interrupts to post
  516. Return: indicated routines will be called: (DV 2.0x) at next task switch
  517.                        (DV 2.2x) immediately
  518. SeeAlso: AX=1013h,AX=1014h
  519. Notes:    this is one of the few TopView calls which are allowed from a hardware
  520.       interrupt handler
  521.     the handler will be called with ES containing the segment of the handle
  522.       of the next task to be executed; on return, ES must be the segment of
  523.       a task handle
  524. ----------151016-----------------------------
  525. INT 15 - TopView - "ISOBJ" - VERIFY OBJECT HANDLE
  526.     AX = 1016h
  527.     ES:DI = possible object handle
  528. Return: BX = FFFFh if ES:DI is a valid object handle
  529.          0000h if ES:DI is not
  530. SeeAlso: AX=DE14h
  531. ----------151017-----------------------------
  532. INT 15 - TopView - UNIMPLEMENTED IN DV 2.x
  533.     AX = 1017h
  534. Return: pops up "Programming error" window in DV 2.x
  535. ----------151018-----------------------------
  536. INT 15 - TopView - "LOCATE" - FIND WINDOW AT A GIVEN SCREEN LOCATION
  537.     AX = 1018h
  538.     BH = column
  539.     BL = row
  540.     ES = segment of object handle for window below which to search
  541.          0000h = start search with topmost window
  542. Return: ES = segment of object handle for window which is visible at the
  543.            indicated position, or covered by indicated window
  544.        = 0000h no window
  545. SeeAlso: AX=1023h,AX=1024h
  546. ----------151019-----------------------------
  547. INT 15 - TopView - "SOUND" - MAKE TONE
  548.     AX = 1019h
  549.     BX = frequency in Hertz (0000h = silence)
  550.     CX = duration in clock ticks (18.2 ticks/sec)
  551. Return: immediately, tone continues to completion
  552. Notes:    if another tone is already playing, the new tone does not start until
  553.       completion of the previous one.  Up to 32 tones may be queued before
  554.       the process is blocked until a note completes.
  555.     in DV 2.00, the lowest tone allowed is 20 Hz
  556.     if CX = 0, the current note is cancelled; if BX = 0 as well, all queued
  557.       notes are also cancelled
  558. SeeAlso: INT 16/AH=73h
  559. ----------15101A-----------------------------
  560. INT 15 - TopView - "OSTACK" - SWITCH TO TASK'S INTERNAL STACK
  561.     AX = 101Ah
  562. Return: stack switched
  563. Notes:    this call may not be nested; a second call must be preceded by a call
  564.       to "USTACK" (AX=1025h)
  565.     while TopView requires many API calls to be executed while on the
  566.       task's internal stack, DESQview allows those calls to be executed
  567.       regardless of the current stack
  568. SeeAlso: AX=1025h
  569. ----------15101B-----------------------------
  570. INT 15 - TopView - "BEGINC" - BEGIN CRITICAL REGION
  571.     AX = 101Bh
  572. Return: task-switching temporarily disabled
  573. Notes:    will not task-switch until "ENDC" (AX = 101Ch) called unless task
  574.       voluntarily releases the CPU (upon regaining the CPU, task-switching
  575.       will again be disabled)
  576.     suspends the caller until DOS is free
  577. SeeAlso: AH=0Dh"MultiDOS",AX=101Ch,AX=DE13h,AX=DE1Ch,INT 2F/AX=1681h
  578. ----------15101C-----------------------------
  579. INT 15 - TopView - "ENDC" - END CRITICAL REGION
  580.     AX = 101Ch
  581. Return: task-switching enabled
  582. Note:    this API call may be made from within a hardware interrupt handler
  583. SeeAlso: AX=101Bh,AX=DE13h,AX=DE1Bh,INT 2F/AX=1682h
  584. ----------15101D-----------------------------
  585. INT 15 - TopView - "STOP" - STOP TASK
  586.     AX = 101Dh
  587.     ES = segment of object handle for task to be stopped
  588.          (== handle of main window for that task)
  589. Return: indicated task will not get any CPU time until restarted with AX=101Eh
  590. Note:    once a task has been stopped, additional "STOP"s are ignored
  591. BUG:    in DV 2.00, this function is ignored unless the indicated task is the
  592.       current task
  593. SeeAlso: AX=101Eh,AX=102Bh,AH=12h"VMiX"
  594. ----------15101E-----------------------------
  595. INT 15 - TopView - "START" - START TASK
  596.     AX = 101Eh
  597.     ES = segment of object handle for task to be started
  598.          (== handle of main window for that task)
  599. Return: indicated task is started up again
  600. Note:    once a task has been started, additional "START"s are ignored
  601. SeeAlso: AX=101Dh,AX=102Bh
  602. ----------15101F-----------------------------
  603. INT 15 - TopView - "DISPEROR" - POP-UP ERROR WINDOW
  604.     AX = 101Fh
  605.     BX = bit fields
  606.          bits 0-12: number of characters to display
  607.          bits 13,14: which mouse button may be pressed to remove window
  608.              00 = either
  609.              01 = left
  610.              10 = right
  611.              11 = either
  612.          bit 15: beep if 1
  613.     DS:DI -> text of message
  614.     CH = width of error window (0 = default)
  615.     CL = height of error window (0 = default)
  616.     DX = segment of object handle
  617. Return: BX = status: 1 = left button, 2 = right, 27 = ESC pressed
  618. Note:    window remains on-screen until ESC or indicated mouse button is pressed
  619. ----------151020-----------------------------
  620. INT 15 - TopView - UNIMPLEMENTED IN DV 2.0x
  621.     AX = 1020h
  622. Return: pops up "Programming error" window in DV 2.0x
  623. ----------151021-----------------------------
  624. INT 15 - TopView - "PGMINT" - INTERRUPT ANOTHER TASK
  625.     AX = 1021h
  626.     BX = segment of object handle for task to interrupt (not self)
  627.     DX:CX -> FAR routine to jump to next time task is run
  628. Return: nothing
  629. Notes:    the FAR routine is entered with the current ES, DS, SI, DI, and BP
  630.       values, using the task's internal stack (see AX=101Ah); only SS:SP
  631.       needs to be preserved
  632.     multiple PGMINTs to a single task are processed last-in first-out
  633.     if the other task is in a DOS or DV API call, the interruption will
  634.       occur on return from that call
  635. ----------151022-----------------------------
  636. INT 15 - TopView - "GETVER" - GET VERSION
  637.     AX = 1022h
  638.     BX = 0
  639. Return: BX nonzero, TopView or compatible loaded
  640.     (BL = major version, BH = minor version)
  641. Notes:    TaskView returns BX = 0001h, DESQview 2.0 returns BX = 0A01h
  642. ----------151023-----------------------------
  643. INT 15 - TopView - "POSWIN" - POSITION WINDOW
  644.     AX = 1023h
  645.     BX = segment of object handle for parent window within which to
  646.          position the window (0 = full screen)
  647.     ES = segment of object handle for window to be positioned
  648.     DL = bit flags
  649.          bits 0,1: horizontal position
  650.         00 = current
  651.         01 = center
  652.         10 = left
  653.         11 = right
  654.          bits 2,3: vertical position
  655.         00 = current
  656.         01 = center
  657.         10 = top
  658.         11 = bottom
  659.          bit 4: don't redraw screen if set
  660.          bits 5-7 not used
  661.     CH = number of columns to offset from position specified by DL
  662.     CL = number of rows to offset from position specified by DL
  663. Return: nothing
  664. ----------151024-----------------------------
  665. INT 15 - TopView - "GETBUF" - GET VIRTUAL SCREEN INFO
  666.     AX = 1024h
  667.     BX = segment of object handle for window
  668.           (0 = use default)
  669. Return: ES:DI -> virtual screen
  670.     CX = size of virtual screen in bytes
  671.     DL = 00h text screen
  672.          01h graphics screen
  673. SeeAlso: INT 10/AH=FEh,INT 21/AH=2Bh/CX=4445h
  674. ----------151025-----------------------------
  675. INT 15 - TopView - "USTACK" - SWITCH BACK TO USER'S STACK
  676.     AX = 1025h
  677. Return: stack switched back
  678. Notes:    call only after having switched to internal stack with AX=101Ah
  679.     while TopView requires many API calls to be executed while on the
  680.       task's private stack, DESQview allows those calls to be executed
  681.       regardless of the current stack
  682. SeeAlso: AX=101Ah
  683. ----------1510-------------------------------
  684. INT 15 - DESQview (TopView???) - UNIMPLEMENTED IN DV 2.x
  685.     AH = 10h
  686.     AL = 26h thru 2Ah
  687. Return: pops up "Programming error" window in DV 2.x
  688. ----------15102B-----------------------------
  689. INT 15 - DESQview 2.0 (TopView???) - "POSTTASK" - AWAKEN TASK
  690.     AX = 102Bh
  691.     BX = segment of object handle for task
  692. Return: nothing
  693. Note:    forces a task which is waiting on its objectq to continue by placing
  694.       the handle for the task on the objectq
  695. SeeAlso: AX=101Dh,AX=101Eh
  696. ----------15102C-----------------------------
  697. INT 15 - DESQview 2.0 (TopView???) - START NEW APPLICATION IN NEW PROCESS
  698.     AX = 102Ch
  699.     ES:DI -> contents of .PIF/.DVP file (see below)
  700.     BX = size of .PIF/.DVP info
  701. Return: BX = segment of object handle for new task
  702.          0000h on error
  703.  
  704. Format of .PIF/.DVP file:
  705. Offset    Size    Description
  706.  00h    WORD    reserved (0)
  707.  02h 30 BYTEs    blank-padded program title
  708.  20h    WORD    maximum memory to allocate to partition in K
  709.  22h    WORD    minimum memory required in K
  710.  24h 64 BYTEs    ASCIZ program pathname
  711.  64h    BYTE    default drive letter ('A',...)
  712.  65h 64 BYTEs    ASCIZ default directory name
  713.  A5h 64 BYTEs    ASCIZ program parameters
  714.  E5h    BYTE    initial screen mode (0-7) (see also offset 189h)
  715.  E6h    BYTE    number of text pages used
  716.  E7h    BYTE    number of first interrupt to save
  717.  E8h    BYTE    number of last interrupt to save
  718.  E9h    BYTE    rows in virtual screen buffer
  719.  EAh    BYTE    columns in virtual screen buffer
  720.  EBh    BYTE    initial window position, row
  721.  ECh    BYTE    initial window position, column
  722.  EDh    WORD    system memory in K
  723.  EFh 64 BYTEs    ASCIZ shared program name
  724. 12Fh 64 BYTEs    ASCIZ shared program data file
  725. 16Fh    BYTE    flags1
  726.         bit 7: writes text directly to screen
  727.         bit 6: runs in foreground only
  728.         bit 5: uses math coprocessor
  729.         bit 4: accesses system keyboard buffer directly
  730.         bits 3-1: reserved (0)
  731.         bit 0: swappable
  732. 170h    BYTE    flags2
  733.         bit 6: uses command-line parameters in field at A5h
  734.         bit 5: swaps interrupt vectors
  735. ---information unique to .DVP files---
  736. 171h  2 BYTEs    keys to use on open menu
  737. 173h    WORD    size of script buffer in bytes
  738. 175h    WORD    automatically give up CPU after this many tests for keyboard
  739.         input in one clock tick (default 0 = never)
  740. 177h    BYTE    nonzero = "uses own colors"
  741. 178h    BYTE    nonzero if application swappable
  742. 179h  3 BYTEs    reserved (0)
  743. 17Ch    BYTE    nonzero to automatically close on exit
  744. 17Dh    BYTE    nonzero if copy-protect floppy is required
  745. ---information unique to DESQview 2.0+---
  746. 17Eh    BYTE    .DVP version number
  747.         00h DESQview 1.2+
  748.         01h DESQview 2.0+
  749.         02h DESQview 2.2+
  750. 17Fh    BYTE    reserved (0)
  751. 180h    BYTE    initial number of rows in physical window
  752. 181h    BYTE    initial number of columns in physical window
  753. 182h    WORD    maximum expanded memory to allow, in K
  754. 184h    BYTE    flags3
  755.         bit 7: automatically assign window position
  756.         bit 5: maximum memory value has been specified
  757.         bit 4: disallow "Close" command
  758.         bit 3: foreground-only when doing graphics
  759.         bit 2: don't virtualize
  760.         bit 1: ??? set by DV 2.31 when "Runs in Background" = "D"
  761. 185h    BYTE    keyboard conflict level (0-4 for DV<2.26, 00h-0Fh for DV2.26+)
  762. 186h    BYTE    number of graphics pages used
  763. 187h    WORD    extra system memory size
  764. 189h    BYTE    initial screen mode (FFh = default) (overrides offset E5h)
  765. ---information unique to DESQview 2.2+---
  766. 18Ah    BYTE    serial port usage
  767.         FFh uses all serial ports
  768.         00h no serial ports
  769.         01h only COM1
  770.         02h only COM2
  771. 18Bh    BYTE    flags4
  772.         bit 7: automatically close application on exit if .COM or .EXE
  773.             specified
  774.         bit 6: swappable if not using serial ports
  775.         bit 5: start program with window hidden (v2.26+)
  776.         bit 4: start program in background (v2.26+)
  777.         bit 3: virtualize text
  778.         bit 2: virtualize graphics
  779.         bit 1: share CPU when foreground
  780.         bit 0: share EGA when foreground and zoomed
  781. 18Ch    BYTE    protection level for 386 machines
  782. 18Dh 19 BYTEs    reserved (0)
  783. ----------15102D-----------------------------
  784. INT 15 - DESQview 2.0 - KEYBOARD MOUSE CONTROL
  785.     AX = 102Dh
  786.     BL = subfunction
  787.          00h determine whether using keyboard mouse
  788.         Return: BL = 00h using real mouse
  789.                  01h using keyboard mouse
  790.          01h turn keyboard mouse on
  791.          02h turn keyboard mouse off
  792. ----------1511-------------------------------
  793. INT 15 - TopView commands
  794.     AH = 11h
  795.     AL = various (except 17h)
  796. Note:    in DESQview 2.x, these function calls are identical to AH=DEh, so
  797.       see those below
  798. SeeAlso: AH=DEh
  799. ----------1511-------------------------------
  800. INT 15 - VMiX - EXECUTE SHELL SYSTEM COMMANDS
  801.     AH = 11h
  802.     STACK:    DWORD    pointer to ASCIZ string containing a VMiX shell
  803.             request (max len = 127)
  804. Return: AX = status
  805. ----------1511-------------------------------
  806. INT 15 - MultiDOS Plus - TURN OFF AltZ TOGGLE
  807.     AH = 11h
  808. Note:    disables the Alt-Z MultiDOS command/program-selection hotkey
  809. SeeAlso: AH=12h"MultiDOS"
  810. ----------151117BX0000-----------------------
  811. INT 15 - DESQview 2.2+ - "ASSERTMAP" - GET/SET MAPPING CONTEXT
  812.     AX = 1117h
  813.     BX = 0000h    get current mapping context without setting
  814.          nonzero    set new mapping context
  815. Return: BX = mapping context in effect before call
  816.     interrupts enabled
  817. Notes:    this function differs from AX = DE17h for DESQview v2.20 through 2.25
  818.     mapping contexts determine conventional-memory addressability; setting
  819.       a mapping context ensures that the associated program and data areas
  820.       are in memory for access.  Usable by drivers, TSRs and shared
  821.       programs.
  822.     caller need not be running under DESQview, but must ensure that the
  823.       stack in use will not be mapped out by the call
  824. SeeAlso: AX=DE17h,INT 2F/AX=1685h
  825. ----------1511DE-----------------------------
  826. INT 15 - DESQview - XDV.COM - INSTALLATION CHECK
  827.     AX = 11DEh
  828. Return: CF clear if installed
  829.         AX = segment at which XDV is located
  830. ----------1512-------------------------------
  831. INT 15 - VMiX - PUT PROCESS TO SLEEP
  832.     AH = 12h
  833.     STACK:    WORD    process ID
  834. Return: AX = status
  835. SeeAlso: AH=03h"MultiDOS",AX=101Dh,AH=13h"VMiX"
  836. ----------1512-------------------------------
  837. INT 15 - MultiDOS Plus - TURN ON AltZ TOGGLE
  838.     AH = 12h
  839. Note:    enables the Alt-Z MultiDOS command/program-selection hotkey
  840. SeeAlso: AH=11h"MultiDOS"
  841. ----------1512--BH00-------------------------
  842. INT 15 - TopView - SEND MESSAGE - "HANDLE" - RETURN OBJECT HANDLE
  843.     AH = 12h
  844.     BH = 00h
  845.     BL = which handle to return
  846.         00h handle in DWORD on top of stack
  847.         01h current task's window handle
  848.         02h given task's mailbox handle (task's handle on stack)
  849.         03h current task's mailbox handle
  850.         04h given task's keyboard handle (task's handle on stack)
  851.         05h current task's keyboard object handle
  852.         06h given task's OBJECTQ handle (task's handle on stack)
  853.         07h current task's OBJECTQ handle
  854.         08h      \
  855.           thru > return 0000:0000 under DV < 2.26
  856.         10h      /
  857.         0Ch (2.26+) task owning object with handle in DWORD on top of stack
  858.         0Dh (2.26+) task handle of owner (parent) of current task
  859. Return: DWORD on top of stack is object handle
  860. Note:    BL=0Ch,0Dh returns 00000000h if the object is not open (keyboard,
  861.       mailbox, panel, pointer, and timer objects) or is an orphan (task,
  862.       window)
  863. ----------1512--BH01-------------------------
  864. INT 15 - TopView - SEND MESSAGE - "NEW" - CREATE NEW OBJECT
  865.     AH = 12h
  866.     BH = 01h
  867.     BL = object type to create
  868.         00h (DV 2.0x only) handle is DWORD on top of stack
  869.         01h (DV 2.0x only) use task's window handle
  870.         02h (DV 2.0x only) given task's mailbox (task's handle on stack)
  871.         03h (DV 2.0x only) current task's mailbox
  872.         04h (DV 2.0x only) given task's keyboard (task's handle on stack)
  873.         05h (DV 2.0x only) current task's keyboard object
  874.         08h WINDOW class
  875.         09h MAILBOX class
  876.         0Ah KEYBOARD class
  877.         0Bh TIMER object (counts down 32-bit time in 10ms increments)
  878.         0Fh POINTER object
  879.         10h PANEL object
  880.     STACK: (if window object or WINDOW class)
  881.            DWORD address to jump to (no new task if high word == 0)
  882.            DWORD (reserved) 0 = non-task window, FFFFh = task window
  883.            DWORD bytes for task's private stack (FFFFh == default of 0100h)
  884.            DWORD bytes system memory for input buffer for READ/READN
  885.             (0 == none, -1 == default--same as logical window size)
  886.            DWORD window size, columns
  887.            DWORD window size, rows
  888.            DWORD length of window title
  889.            DWORD address of window title
  890. Return: DWORD on top of stack is new object handle
  891. Notes:    if a new task is created, it is started with
  892.       AX = BX = SI = DI = BP = 0
  893.       DX:CX = handle of parent task
  894.       DS = ES = SS = segment of private stack (and new task's handle)
  895.     new windows are orphans, inherit the colors/hidden status of the
  896.       creating task's window, and are placed in the upper left hand corner
  897.       of the screen but not automatically redrawn
  898.     new keyboards are closed, and have all object bits cleared except for
  899.       the hardware cursor bit
  900. SeeAlso: AH=12h/BH=02h
  901. ----------1512--BH02-------------------------
  902. INT 15 - TopView - SEND MESSAGE - "FREE" - FREE AN OBJECT
  903.     AH = 12h
  904.     BH = 02h
  905.     BL = object
  906.         00h handle in DWORD on top of stack
  907.         window: close window and free
  908.         timer: free timer
  909.         panel: free panel object
  910.         pointer: free pointer
  911.         01h task's window handle - kills task, never returns
  912.         02h given task's mailbox (task's handle on top of stack)
  913.         03h current task's mailbox
  914.         04h given task's keyboard (task's handle on top of stack)
  915.         05h current task's keyboard object
  916. Notes:    when a window is freed, its keyboard and pointer objects are freed;
  917.       task windows also free any mailbox, objectq, and panel objects held
  918.       by the task and any child tasks
  919.     if the keyboard being freed is the default keyboard for a task, this
  920.       call is equivalent to CLOSE
  921.     panel and pointer objects are automatically closed if open
  922. SeeAlso: AH=12h/BH=01h,AH=12h/BH=0Dh
  923. ----------1512--BH03-------------------------
  924. INT 15 - TopView - SEND MESSAGE - "ADDR" - GET HANDLE OF MESSAGE SENDER
  925.     AH = 12h
  926.     BH = 03h
  927.     BL = object
  928.         00h mailbox handle in DWORD on top of stack
  929.         02h sender of last msg read from mailbox (task's handle on stack)
  930.         03h sender of last msg read from current task's mailbox
  931. Return: DWORD on stack is task handle of message sender
  932. SeeAlso: AH=12h/BH=00h
  933. ----------1512--BH03-------------------------
  934. INT 15 - DESQview 2.26+ - "CONNECT" - CONNECT TWO WINDOWS
  935.     AH = 12h
  936.     BH = 03h
  937.     BL = window to be connected
  938.         00h handle of window to be attached in DWORD on top of stack
  939.         01h attach current task's main window
  940.     STACK: DWORD handle of window to attach to or 00000000h to detach
  941. Return: ???
  942. Notes:    when two windows are connected, both will move if the user moves either
  943.     multiple windows may be attached to a single window, but each window
  944.       may only be attached to one window at a time
  945. ----------1512--BX0300-----------------------
  946. INT 15 - TopView - SEND MESSAGE - "DIR" - GET PANEL FILE DIRECTORY
  947.     AH = 12h
  948.     BX = 0300h
  949.     STACK: DWORD handle of panel object
  950. Return: STACK: DWORD length of directory (always multiple of 14 bytes)
  951.            DWORD address of directory
  952. Note:    a null string is returned if the object is not open
  953.  
  954. Format of panel file:
  955. Offset    Size    Description
  956.  00h  2 BYTEs    C0h C3h
  957.  02h    BYTE    number of panels in file
  958.  03h    for each panel in file:
  959.         8 BYTEs  blank-padded panel name
  960.           DWORD  panel offset in file
  961.           WORD   panel length
  962.     data for panels (each consists of one or more window/query/manager
  963.     streams)
  964.         first byte of each panel must be 1Bh, fifth byte must be E5h
  965. ----------1512--BH04-------------------------
  966. INT 15 - TopView - SEND MESSAGE - "READ" - READ NEXT LOGICAL LINE OF WINDOW
  967.     AH = 12h
  968.     BH = 04h
  969.     BL = window to read from
  970.         00h handle is DWORD on top of stack
  971.         01h use calling task's default window
  972.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  973.         0Dh (DV 2.26+) default window of parent task of current task
  974. Return: STACK:    DWORD number of bytes read
  975.         DWORD address of buffer
  976. Notes:    reading starts at the current logical cursor position; the cursor is
  977.       updated to point at the character following the last one read
  978.     any translucent blanks (FFh) which are visible on screen are changed
  979.       to the character which is seen through them
  980.     the string produced by the read is placed in an input buffer which may
  981.       be reused by the next READ or READN of a window
  982.     window stream opcodes D8h and D9h determine whether the read returns
  983.       characters or attributes
  984. SeeAlso: AH=12h/BH=05h"WINDOW",AH=12h/BH=12h
  985. ----------1512--BH04-------------------------
  986. INT 15 - TopView - SEND MESSAGE - "READ" - GET NEXT RECORD FROM OBJECT
  987.     AH = 12h
  988.     BH = 04h
  989.     BL = object
  990.         00h handle is DWORD on top of stack
  991.         mailbox: wait for and get next message
  992.         keyboard: wait for and get pointer to next input buffer
  993.         pointer: wait for and get next message
  994.         02h get next message from mailbox (task's handle on top of stack)
  995.         03h get next message from current task's mailbox
  996.         04h get the next input from keyboard (handle on top of stack)
  997.         05h get the next input from task's default keyboard
  998.         06h wait for input from any object in OBJECTQ (handle on stack)
  999.         07h wait for input from any object in task's default OBJECTQ
  1000. Return: STACK: (if objectq) DWORD handle of object with input
  1001.            (otherwise)  DWORD number of bytes
  1002.                 DWORD address
  1003. Notes:    for a keyboard in keystroke mode, the input buffer is a single byte
  1004.       containing the character code as returned by the BIOS; the BIOS scan
  1005.       code is available via the STATUS call if the character is zero
  1006.     for a keyboard in field mode, the input buffer format is determined
  1007.       by the field table header for the window the keyboard is attached to
  1008.     keyboard input buffers and mailbox message buffers may be invalidated
  1009.       by the next READ, ERASE, CLOSE, or FREE message to the same object
  1010. SeeAlso: AH=12h/BH=05h"OBJECT"
  1011.  
  1012. Format of pointer message:
  1013. Offset    Size    Description
  1014.  00h    WORD    row
  1015.  02h    WORD    column
  1016.  04h    BYTE    status
  1017.         bit 6: set when press/release mode active and button released
  1018.         bits 7-2: number of clicks-1 if multiple-click mode active
  1019.         bits 1,0: button pressed (00=none,01=button1,10=button2)
  1020.  05h    BYTE    field number or zero (APILEVEL >= 2.00 only)
  1021. ----------1512--BX0400-----------------------
  1022. INT 15 - TopView - SEND MESSAGE - "READ" - WAIT FOR TIMER TO EXPIRE
  1023.     AH = 12h
  1024.     BX = 0400h
  1025.     STACK: DWORD timer's handle
  1026. Return: after timer expires
  1027.     STACK: DWORD time in 1/100 sec after midnight when timer expired
  1028. ----------1512--BX0400-----------------------
  1029. INT 15 - TopView - SEND MESSAGE - "APPLY" - WRITE PANEL TO WINDOW
  1030.     AH = 12h
  1031.     BX = 0400h
  1032.     STACK: DWORD handle of panel object
  1033.            DWORD window's handle (or 0 for current task's window)
  1034.            DWORD length of panel name
  1035.            DWORD pointer to panel name
  1036. Return: STACK: DWORD handle of keyboard or 0
  1037.            DWORD handle of window which was used
  1038. Notes:    status of APPLY may be checked with STATUS message
  1039.     panel MUST have the following format
  1040.       first byte must be 1Bh (i.e. must start with a stream)
  1041.       first opcode in stream must be E5h
  1042.         single byte arg of opcode is interpreted thus:
  1043.           bits 7,6    11 means create new window
  1044.             10 means create new field table for existing window
  1045.             01 means use existing window and field table
  1046.           bit 5 if set, panel contains a field table 
  1047.             (creates a new keyboard and puts it in field mode)
  1048.           bit 4 if set, panel contains input fields
  1049.           bit 3 if set, panel contains select fields but no input fields
  1050.     if the panel contains input or select fields, a keyboard handle is
  1051.       returned; either the window's current open keyboard or a
  1052.       newly-created keyboard object.  The caller should read that keyboard
  1053.       to obtain input from the panel.
  1054. ----------1512--BH05------------------------
  1055. INT 15 - TopView - SEND MESSAGE - "WRITE" - WRITE TO OBJECT
  1056.     AH = 12h
  1057.     BH = 05h
  1058.     BL = object
  1059.         00h handle is DWORD on top of stack
  1060.         timer: start timer to end at a specified time
  1061.         keyboard: add input buffer to queue
  1062.         pointer: move pointer icon to specified position
  1063.         02h send message by value/status=0 to mbox (task's handle on stack)
  1064.         03h send message by value/status=0 to current task's mailbox
  1065.         04h add input buffer to KEYBOARD queue (handle on top of stack)
  1066.         05h add input buffer to task's default KEYBOARD queue
  1067.         06h add an object to OBJECTQ (handle on top of stack)
  1068.         07h add an object to task's default OBJECTQ
  1069.     STACK: (if mailbox)  DWORD length
  1070.                  DWORD address
  1071.            (if keyboard) DWORD status (scan code in keystroke mode)
  1072.                  DWORD length (should be 1 in keystroke mode)
  1073.                  DWORD address
  1074.            (if objectq)  DWORD handle of object to add
  1075.            (if timer)    DWORD 1/100ths seconds since midnight (actually
  1076.                    only accurate to 1/18 sec)
  1077.            (if pointer)  DWORD column relative to origin of window
  1078.                  DWORD row relative to origin of window
  1079. Notes:    under DV 2.2+, failed mailbox writes may return CF set (see AX=DE15h)
  1080.     the data and status written to a keyboard object must match the format
  1081.       returned by the keyboard object in the current mode
  1082.     the pointer position is scaled according to the current scaling factors
  1083. SeeAlso: AH=12h/BH=04h
  1084. ----------1512--BH05-------------------------
  1085. INT 15 - TopView - SEND MESSAGE - "WRITE" - WRITE STRING TO WINDOW
  1086.     AH = 12h
  1087.     BH = 05h
  1088.     BL = window to write to
  1089.         00h DWORD on top of stack is window handle
  1090.         01h write string to task's default window
  1091.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  1092.         0Dh (DV 2.26+) default window of parent of current task
  1093.     STACK: DWORD object handle if handle passed on stack
  1094.            DWORD total length of string (high word == 0)
  1095.            DWORD address of string to display
  1096. Return: indicated actions performed
  1097.     a. non-control characters are displayed (opcodes DEh and DFh control
  1098.        whether the attributes are left or changed to the current attrib)
  1099.     b. CR/LF/BS/Tab cause the usual cursor movement
  1100.     c. ESC starts a data structure with additional commands if following
  1101.        byte is less than 20h; otherwise, it is written to the window
  1102.     STACK:    DWORD handle of new window if window stream opcode E6h
  1103.         else nothing
  1104.  
  1105. Data Structure:
  1106.     MAGIC  DB  1Bh
  1107.     MODE   DB  ?   ; 00h, 01h, 10h, 14h-1Fh legal
  1108.     LENGTH DW  ?   ; length of remainder in bytes
  1109.     var-length fields follow, each an OPCODE followed by
  1110.          zero or more args
  1111.  
  1112. MODE 00h (set or display values) "WINDOW STREAM"
  1113.     Opcodes:args
  1114.     00h  display 20h blanks with the default attribute
  1115.     01h-1Fh display OPCODE blanks with the default attribute
  1116.     20h  display char with default attribute 20h times
  1117.          BYTE char to repeat
  1118.     21h-3Fh display char with default attribute OPCODE-20h times
  1119.          BYTE char to repeat
  1120.     40h  display 20h blanks with specified attribute
  1121.          BYTE attribute of blanks
  1122.     41h-5Fh display OPCODE-40h blanks with specified attribute
  1123.          BYTE attribute of blanks
  1124.     60h  display next 20h characters
  1125.          20h BYTES characters to display
  1126.     61h-7Fh display next OPCODE-60h characters
  1127.          N BYTES characters to display
  1128.     80h-87h     display N blanks with default attribute
  1129.          BYTE low 8 bits of 11-bit count (high 3 in low 3 bits of OPCODE)
  1130.               [000h means 800h]
  1131.     88h-8Fh display N copies of the character
  1132.          BYTE low 8 bits of 11-bit count (high 3 in low 3 bits of OPCODE)
  1133.               [000h means 800h]
  1134.          BYTE character to repeat
  1135.     90h-97h     display N blanks with specified attribute
  1136.          BYTE low 8 bits of 11-bit length (high 3 in low 3 bits of OPCODE)
  1137.               [000h means 800h]
  1138.          BYTE attribute
  1139.     98h-9FH     display string at logical cursor pos
  1140.          BYTE low 8 bits of 11-bit length (high 3 in low 3 bits of OPCODE)
  1141.               [000h means 800h]
  1142.          N BYTES string to display
  1143.     A0h  set logical cursor row
  1144.          BYTE row number (0 is top)
  1145.     A1h  set logical cursor column
  1146.          BYTE column number (0 is leftmost)
  1147.     A2h  set top edge of scrolling region
  1148.          BYTE row
  1149.     A3h  set left edge of scrolling region
  1150.          BYTE column
  1151.     A4h  set row of physical window position
  1152.          BYTE line
  1153.     A5h  set column of physical window position
  1154.          BYTE column
  1155.     A6h  set height of physical window
  1156.          BYTE #rows
  1157.     A7h  set width of physical window
  1158.          BYTE #columns
  1159.     A8h  set viewport row
  1160.          BYTE row
  1161.     A9h  set viewport column
  1162.          BYTE column
  1163.     AAh  set virtual screen height [contents of window unpredictable after]
  1164.          BYTE rows
  1165.     ABh  set virtual screen width [contents of window unpredictable after]
  1166.          BYTE columns
  1167.     ACh-AEh     unused
  1168.     AFh  set compatible/preferred video modes
  1169.          BYTE compatibility/preference mask
  1170.         bit 7    compatible with monochrome
  1171.         bit 6    compatible with color text, EGA/VGA graphics
  1172.         bit 5    compatible with medium-resolution CGA graphics
  1173.         bit 4    compatible with high-resolution CGA graphics
  1174.         bit 3    prefer monochrome
  1175.         bit 2    prefer color text, EGA/VGA graphics
  1176.         bit 1    prefer medium-resolution CGA graphics
  1177.         bit 0    prefer high-resolution CGA graphics
  1178.     B0h  move logical cursor down
  1179.          BYTE #rows (signed, negative values move up)
  1180.             [if #rows=0 and hardware cursor owner, update hw crsr]
  1181.     B1h  move logical cursor right
  1182.          BYTE #cols (signed, negative values move left)
  1183.             [if #cols=0 and hardware cursor owner, update hw crsr]
  1184.     B2h  shift top edge of scrolling region
  1185.          BYTE #rows (signed)
  1186.     B3h  shift left edge of scrolling region
  1187.          BYTE #cols (signed)
  1188.     B4h  shift physical window down
  1189.          BYTE #lines (signed)
  1190.     B5h  shift physical window right
  1191.          BYTE #columns (signed)
  1192.     B6h  expand physical window vertically
  1193.          BYTE #lines (signed)
  1194.     B7h  expand physical window horizontally
  1195.          BYTE #columns (signed)
  1196.     B8h  adjust viewport row
  1197.          BYTE #rows (signed)
  1198.     B9h  adjust viewport column
  1199.          BYTE #columns (signed)
  1200.     BAh  adjust virtual screen height [contents of window unpredict after]
  1201.          BYTE #rows to increase (signed)
  1202.     BBh  adjust virtual screen width [contents of window unpredictbl after]
  1203.          BYTE #cols to increase (signed)
  1204.     BCh-BFh     reserved (currently unused)
  1205.     C0h  set logical cursor position
  1206.          BYTE row number (0 is top border)
  1207.          BYTE column number (0 is left border)
  1208.     C1h  set top left corner of scrolling region
  1209.          BYTE row
  1210.          BYTE column
  1211.     C2h  set physical window pos
  1212.          BYTE upper left row (no top border if 0)
  1213.          BYTE upper left column (no left border if 0)
  1214.     C3h  set current window size
  1215.          BYTE #rows
  1216.          BYTE #cols
  1217.     C4h  set upper left corner of viewport (portion of virtual screen
  1218.          displayed in window)
  1219.          BYTE row
  1220.          BYTE column
  1221.     C5h  set size of virtual screen [contents unpredictable afterwards]
  1222.          BYTE #rows
  1223.          BYTE #cols
  1224.     C6h  unused
  1225.     C7h  unused
  1226.     C8h  set logical cursor relative to current position
  1227.          BYTE number of rows to move down (signed)
  1228.          BYTE number of columns to move right (signed)
  1229.           [if #rows=#cols=0 and hardware cursor owner, update hw cursr]
  1230.     C9h  shift top left corner of scrolling region
  1231.          BYTE #rows (signed)
  1232.          BYTE #cols (signed)
  1233.     CAh  set window pos relative to current position
  1234.          BYTE number of rows to shift down (signed)
  1235.          BYTE number of columns to shift right (signed)
  1236.     CBh  set window size relative to current size
  1237.          BYTE number of rows to expand (signed)
  1238.          BYTE number of cols to expand (signed)
  1239.     CCh  shift viewport relative to current position
  1240.          BYTE rows to shift (signed)
  1241.          BYTE cols to shift (signed)
  1242.     CDh  resize virtual screen
  1243.          BYTE #rows to expand (signed)
  1244.          BYTE #cols to expand (signed)
  1245.     CEh  scroll text when using E8h-EBh/F8h-FBh opcodes (default)
  1246.     CFh  scroll attributes when using  E8h-EBh/F8h-FBh opcodes
  1247.     D0h  allow window frame to extend beyond screen
  1248.     D1h  always display a complete frame, even if window extends beyond 
  1249.          edge of screen
  1250.     D2h  allow DV to change logical colors on video mode switch (default)
  1251.     D3h  application changes logical attributes
  1252.     D4h  window is visible [must redraw to actually make visible]
  1253.     D5h  window is hidden [must redraw to actually remove]
  1254.     D6h  window has frame (default)
  1255.     D7h  window unframed [must redraw to actually remove frame]
  1256.     D8h  READ/READN will read characters from window (default)
  1257.     D9h  READ/READN will read attributes from window
  1258.     DAh  use logical attributes, which may be remapped
  1259.         attributes
  1260.            1 normal text
  1261.            2 highlighted normal text
  1262.            3 help text
  1263.            4 highlighted help text
  1264.            5 error message
  1265.            6 highlighted error message
  1266.            7 emphasized text
  1267.            8 marked text
  1268.            9-16 are reverse video versions of 1-8
  1269.     DBh  use physical attributes for characters
  1270.     DCh  enable special actions for control characters (default)
  1271.     DDh  disable special control char handling, all chars displayable by
  1272.          BIOS TTY call
  1273.     DEh  write both character and attribute (default)
  1274.     DFh  write character only, leave attribute untouched
  1275.     E0h  repeat following commands through E1h opcode
  1276.          BYTE number of times to repeat (00h means 256 times)
  1277.     E1h  end of commands to repeat, start repeating them
  1278.     E2h  set current output color
  1279.          BYTE color
  1280.     E3h  clear virtual screen from scroll origin to end using current color
  1281.     E4h  redraw window
  1282.     E5h  select menu style
  1283.          BYTE style (normally 18h)
  1284.         bits 5,4 = 01 use two-letter menu entries for remainder of
  1285.           this stream
  1286.     E5h  (panel file only)
  1287.          BYTE modifier
  1288.         bits 7,6 = 11 panel stream creates new window
  1289.              = 10 panel defines new field table for existing window
  1290.              = 01 panel stream uses existing window & field table
  1291.         bit 5 = 1 stream contains a field table (create kyboard object)
  1292.         bit 4 = 1 stream defines input fields (create keyboard object)
  1293.         bit 3 = 1 stream defines select fields but not input fields
  1294.         bit 2 = 1 stream defines exclusive input window (DV 2.2)
  1295.         bit 1 reserved
  1296.         bit 0 reserved
  1297.     E6h  create new window and perform rest of manipulations in new window
  1298.          BYTE number of rows
  1299.          BYTE number of columns
  1300.          Return: DWORD object handle of new window returned on stack at end
  1301.     E7h  no operation
  1302.     E8h  scroll area up (top left corner defined by opcode C1h)
  1303.          BYTE height
  1304.          BYTE width
  1305.     E9h  scroll area down (top left corner defined by opcode C1h)
  1306.          BYTE height
  1307.          BYTE width
  1308.     EAh  scroll area left (top left corner defined by opcode C1h)
  1309.          BYTE height
  1310.          BYTE width
  1311.     EBh  scroll area right (top left corner defined by opcode C1h)
  1312.          BYTE height
  1313.          BYTE width
  1314.     ECh  set logical attributes for window contents
  1315.          BYTE video modes command applies to
  1316.         bit 7    monochrome
  1317.         bit 6    color text, EGA/VGA graphics
  1318.         bit 5    medium-resolution CGA graphics
  1319.         bit 4    high-resolution CGA graphics
  1320.          BYTE which attributes to set
  1321.         bit 7  if set, copy single following byte to indicated attribs
  1322.         bits 4-6  # of first attribute to change - 1
  1323.         bits 0-3  # of consecutive attributes to change
  1324.          N BYTEs new attributes
  1325.     EDh  set logical attributes for window frame
  1326.          BYTE video modes command applies to (see opcode ECh)
  1327.          BYTE which attributes to set
  1328.         bit 7  if set, copy single following byte to indicated attrs
  1329.         bits 4-6  # of first attribute to change - 1
  1330.         bits 0-3  # of consecutive attributes to change
  1331.          N BYTEs new attributes
  1332.           attributes
  1333.                1 = top left corner
  1334.                2 = top right corner
  1335.                3 = bottom left corner
  1336.                4 = bottom right corner
  1337.                5 = top edge
  1338.                6 = bottom edge
  1339.                7 = left edge
  1340.                8 = right edge
  1341.     EEh  set characters for window frame
  1342.          BYTE video modes command applies to (see opcode ECh)
  1343.          BYTE which characters to set
  1344.         bit 7  if set, copy single following byte to indicated chars
  1345.         bits 4-6  # of first char to change - 1
  1346.         bits 0-3  # of consecutive chars to change
  1347.          N BYTEs new chars (same relative position as attributes above)
  1348.     EFh  set window name
  1349.          BYTE length of name (should be in range 0 to logical screen width)
  1350.          N BYTEs name
  1351.     F0h  clear input field to blanks
  1352.          BYTE field number
  1353.     F1h  fill input field with character
  1354.          BYTE field number
  1355.          BYTE char
  1356.     F2h  set color of input field
  1357.          BYTE field number (1-N)
  1358.          BYTE attribute
  1359.     F3h  set initial contents of input field
  1360.          BYTE field number (1-N)
  1361.          N BYTEs enough chars to exactly fill field as defined by op FFh
  1362.     F4h  position cursor to start of specific input field
  1363.          BYTE field number (1-N)
  1364.     F5h  change field table entry
  1365.          BYTE field number
  1366.          7-8 BYTEs field table entry (see opcode FFh below)
  1367.     F6h  set field type
  1368.          BYTE field number
  1369.          BYTE type
  1370.             00h inactive
  1371.             40h output field
  1372.             80h input field
  1373.             C0h deselected field
  1374.             C2h selected field
  1375.     F7h  "broadcast write"    write data to fields with program output bit
  1376.         set in field table entry, in field number order
  1377.          N BYTEs (total length of all program output fields)
  1378.     F8h  scroll field up a line
  1379.          BYTE field number
  1380.     F9h  scroll field down a line
  1381.          BYTE field number
  1382.     FAh  scroll field left
  1383.          BYTE field number
  1384.     FBh  scroll field right
  1385.          BYTE field number
  1386.     FCh  set field table header
  1387.          BYTE number of fields (must be <= existing number of fields)
  1388.          BYTE screen behavior bits
  1389.         bit 7  reserved
  1390.         bit 6  set if menu items may be selected via keyboard
  1391.         bit 5  set if left mouse button may terminate entry
  1392.         bit 4  set if right mouse button may terminate entry
  1393.         bit 3  if set, select fields return contents or blanks rather
  1394.             than 'Y' or 'N'
  1395.         bit 2  if set, modified bits reset on return to application
  1396.         bits 0,1 = 00 no data returned on read of keyboard
  1397.                01 data returned as array of chars containing
  1398.                 all fields packed together, with no field
  1399.                 numbers
  1400.                10 data returned as numbered variable-length
  1401.                 records for all fields
  1402.                11 data returned as numbered variable-length
  1403.                 records for the fields which were modified
  1404.          BYTE current input field (updated by DESQview)
  1405.          BYTE current select field (updated by DESQview)
  1406.          BYTE attribute for select fields when they are pointed at
  1407.          BYTE attribute for select fields which have been selected
  1408.     FDh  reset modified bit for all fields
  1409.     FEh  reset selected and modified bits for all fields
  1410.     FFh  set up input fields
  1411.          6 BYTEs table header (see opcode FCh above)
  1412.          the field table entries, one for each field
  1413.          BYTE start row       \
  1414.          BYTE start column  \ if menu selection and start is to
  1415.          BYTE end row        / right or below end, select from kbd only
  1416.          BYTE end column   /
  1417.          BYTE field type
  1418.             bits 7,6 = 00 inactive (non-entry) field
  1419.                    01 echos keystrokes input to make menu selection
  1420.                    10 fill-in field
  1421.                    11 select field
  1422.             bit 5  field can be filled by broadcast write (F7h opcode)
  1423.             bit 4  reserved
  1424.             bit 3  reserved
  1425.             bit 2  reserved
  1426.             bit 1  set if field selected
  1427.             bit 0  set if field modified
  1428.          BYTE modifier
  1429.               if type is fill-in, then bit flags to determine behavior
  1430.               bit 7     if set, automatically enter CR when field full
  1431.               bit 6     move to next field when current field is full
  1432.               bit 5     if set, enter text from right end (for numbers)
  1433.               bit 4     if set, force input to uppercase
  1434.               bit 3     if set, clear old contents on first keystroke
  1435.               bit 2     if set, input returned when cursor moves out
  1436.                  of modified field (API level 2.02+)
  1437.               bit 1     reserved
  1438.               bit 0     reserved
  1439.               if select field, first key to press to activate
  1440.               00h if have to point-&-click or is an extended-ASCII
  1441.                   keystroke (only if two-key menus enabled)
  1442.          BYTE (select field only) normal color of field
  1443.          BYTE second key for select field.  This byte is present iff
  1444.               two-letter menu entries selected with opcode E5h, and
  1445.               in that case is present regardless of field type
  1446.          Note: DESQview uses and updates the actual copy of the information
  1447.            which is contained in the stream.  Thus this info must remain
  1448.            intact until after the data entry is complete.
  1449.  
  1450. MODE 01h "QUERY STREAM" (valid only for those opcodes listed here)
  1451.     A0h return logical cursor row in next byte
  1452.     A1h return logical cursor column in next byte
  1453.     A2h return top row of scrolling region in next byte
  1454.     A3h return left column of scrolling region in next byte
  1455.     A4h return row of physical window origin in next byte
  1456.     A5h return column of physical window origin in next byte
  1457.     A6h return height of physcial window in next byte
  1458.     A7h return width of physical window in next byte
  1459.     A8h return row of viewport origin in next byte
  1460.     A9h return column of viewport origin in next byte
  1461.     AAh return height of virtual screen in next byte
  1462.     ABh return width of virtual screen in next byte
  1463.     AFh return current video mode in next byte
  1464.     C0h return current logical cursor position in next two bytes
  1465.     C1h return top left corner of scrolling region in next two bytes
  1466.     C2h return current window position in next two bytes
  1467.     C3h return current window size in next two bytes
  1468.     C4h return current viewport origin in next two bytes
  1469.     C5h return current virtual screen size in next two bytes
  1470.     D0h \ overwritten with D0h if frames may fall off screen edge
  1471.     D1h /               D1h if frames always displayed entirely
  1472.     D2h \ overwritten with D2h if DESQview controls color palette
  1473.     D3h /               D3h if application changes color palette
  1474.     D4h \ overwritten with D4h if window visible
  1475.     D5h /               D5h if window hidden
  1476.     D6h \ overwritten with D6h if window has frame
  1477.     D7h /               D7h if window unframed
  1478.     D8h \ overwritten with D8h if reading characters from window
  1479.     D9h /               D9h if reading attributes from window
  1480.     DAh \ overwritten with DAh if using logical attributes
  1481.     DBh /               DBh if using physical attributes
  1482.     DCh \ overwritten with DCh if TTY control char interpretation on
  1483.     DDh /               DDh if TTY control char interpretation off
  1484.     DEh \ overwritten with DEh if writing both characters and attributes
  1485.     DFh /               DFh if leaving attributes untouched
  1486.     E2h return current color in next byte
  1487.     ECh get logical attributes for window contents
  1488.         BYTE execute call if currently in specified video mode
  1489.         bit 7    monochrome
  1490.         bit 6    color text, EGA/VGA graphics
  1491.         bit 5    medium-resolution CGA graphics
  1492.         bit 4    high-resolution CGA graphics
  1493.         BYTE which attributes to get
  1494.         bit 7 unused???
  1495.         bits 4-6 first attribute to get - 1
  1496.         bits 0-3 # consecutive attributes
  1497.         N BYTEs buffer to hold attributes
  1498.     EDh get logical attributes for window frame
  1499.         BYTE execute call if currently in video mode (see opcode ECh)
  1500.         BYTE which attributes to get
  1501.         bit 7 unused???
  1502.         bits 4-6 first attribute to get - 1
  1503.         bits 0-3 # consecutive attributes
  1504.         N BYTEs buffer to hold attributes
  1505.     EEh get characters for window frame
  1506.         BYTE execute call if currently in video mode (see opcode ECh)
  1507.         BYTE which attributes to get
  1508.         bit 7 unused???
  1509.         bits 4-6 first char to get - 1
  1510.         bits 0-3 # consecutive chars
  1511.         N BYTEs buffer to hold chars
  1512.     EFh return first N characters of current window name
  1513.         BYTE    max length of returned name
  1514.         N BYTEs buffer to hold window name
  1515.     F3h return contents of specified field
  1516.         BYTE field number
  1517.         N BYTEs buffer to hold field contents (size exactly equal to field
  1518.             size)
  1519.     F5h get field table entry
  1520.         BYTE field number
  1521.         7-8 BYTEs buffer to hold field table entry
  1522.            Notes: DV < 2.26 always returns 7 bytes
  1523.               DV 2.26+ w/ APILEVEL < 2.26 returns 8 bytes iff field
  1524.             table is using 8-byte entries and eighth byte after
  1525.             F5h is E7h (NOP); otherwise, 7 bytes are returned
  1526.               DV 2.26+ w/ APILEVEL > 2.26 returns 7 or 8 bytes
  1527.             depending on the field table entry size
  1528.     F6h get type of a field
  1529.         BYTE field number
  1530.         BYTE type
  1531.     FCh get field table header
  1532.         6 BYTEs buffer to store header
  1533.  
  1534. MODE 10h "MANAGER STREAM" (valid only for opcodes listed here)
  1535.     00h allow window to be moved horizontally
  1536.     01h allow window to be moved vertically
  1537.     02h allow window to change width
  1538.     03h allow window to change height
  1539.     04h allow window to be scrolled horizontally
  1540.     05h allow window to be scrolled vertically
  1541.     06h allow "Close Window" menu selection for application
  1542.     07h allow "Hide Window" menu selection for application
  1543.     08h allow application to be suspended ("Rearrange/Freeze")
  1544.     0Eh allow "Scissors" menu
  1545.     10h allow DESQview main menu to be popped up
  1546.     11h allow "Switch Windows" menu
  1547.     12h allow "Open Window" menu
  1548.     13h allow "Quit" menu selection
  1549.     20h-33h opposite of 00h-13h, disallow specified action
  1550.     40h notify if horizontal position of window changes
  1551.     41h notify if vertical position of window changes
  1552.     42h notify if width of window changes
  1553.     43h notify if height of window changes
  1554.     44h notify if window scrolled horizontally
  1555.     45h notify if window scrolled vertically
  1556.     46h notify if window is closed--program has to clean up and exit itself
  1557.     47h notify if window is hidden
  1558.     48h notify if "?" on main menu selected
  1559.     49h notify if pointer message sent to window
  1560.     4Ah notify if window is placed in foreground
  1561.     4Bh notify if window is placed in background
  1562.     4Ch notify if video mode changes
  1563.     4Dh notify if "Scissors" menu "Cut" option selected
  1564.     4Eh notify if "Scissors" menu "Copy" option selected
  1565.     4Fh notify if "Scissors" menu "Paste" option selected
  1566.     50h notify if DESQview main menu about to pop up
  1567.     51h notify if DESQview main menu popped down
  1568.     60h-71h     opposite of 40h-51h: don't notify on specified event
  1569.     84h attach window to parent task's window (both move together)
  1570.     85h detach window from parent task's window (may move independently)
  1571.     86h disable background operation for application
  1572.     87h enable running in background
  1573.     88h set minimum size of physical window
  1574.         BYTE rows
  1575.         BYTE columns
  1576.     89h set maximum size of physical window
  1577.         BYTE rows
  1578.         BYTE cols
  1579.     8Ah set primary asynchronous notification routine
  1580.         DWORD address of routine, 0000h:0000h means none (see also below)
  1581.     8Bh set async notification parameter
  1582.         DWORD 32-bit value passed to 8Ah async routine in DS:SI
  1583.     ACh (DV2.2+) perform regular select field attribute processing
  1584.     ADh (DV2.2+) protect attributes in selected field from being lost
  1585.     AEh make window default notify window for owning app (API level 2.00+)
  1586.     AFh set selected field marker character
  1587.         BYTE character to display at left edge of selected fields
  1588.     BCh set standard field processing mode 
  1589.     BDh set alternate field processing mode (enables cursor pad for menus)
  1590.     BEh disables changing reverse logical attributes with ECh opcode
  1591.     BFh enables changing reverse logical attributes with ECh opcode
  1592.     C0h make current window topmost in system
  1593.     C1h force current process into foreground
  1594.     C2h make current window topmost in process
  1595.     C3h position mouse pointer relative to origin of current field
  1596.         BYTE rows below upper left corner of field
  1597.         BYTE columns to right of upper left corner of field
  1598.     C4h position mouse pointer relative to origin of given field
  1599.         BYTE field number
  1600.         BYTE rows below upper left corner of field
  1601.         BYTE columns to right of upper left corner of field
  1602.     C5h orphan current window (also hides it)
  1603.         Note: must be last in stream; all subsequent commands ignored
  1604.     C6h show all windows for this process
  1605.     C7h hide all windows for this process
  1606.     C8h suspend process and hide all its windows
  1607.     C9h force current process into background
  1608.     CAh make current window bottom-most in process
  1609.     CBh cancel current window manager operation, remove DV menu, give 
  1610.         control to topmost application
  1611.     CCh orphan window and give it to the system for use as paste data
  1612.     CEh reorder windows
  1613.         DWORD pointer to null-terminated list of words
  1614.           each word is segment of object handle for a window
  1615.     FFh no operation
  1616.  
  1617. MODES 14h to 1Fh "USER STREAMS"
  1618.     normally NOPs, but may be defined by SETESC message to invoke FAR
  1619.     routines, one for each mode number
  1620.       on entry to handler,
  1621.         DS:SI -> first byte of actual stream (not header)
  1622.         CX = #bytes in stream
  1623.         ES:DI = window's handle
  1624.  
  1625. Asynchronous notification routine defined by manager stream 8Ah called with:
  1626.     ES:DI = handle of window
  1627.     DS:SI is 32-bit value set by 8Bh manager stream opcode
  1628.        mailbox contains message indicating event
  1629.           Opcode
  1630.            40h  horizontal movement
  1631.            DWORD object handle of window
  1632.            BYTE     new row
  1633.            BYTE     new col
  1634.            41h  vertical movement
  1635.            DWORD object handle of window
  1636.            BYTE     new row
  1637.            BYTE     new col
  1638.            42h  horizontal size change
  1639.            DWORD object handle of window
  1640.            BYTE     new rows
  1641.            BYTE     new cols
  1642.            43h  vertical size change
  1643.            DWORD object handle of window
  1644.            BYTE     new rows
  1645.            BYTE     new cols
  1646.            44h  scrolled horizontally
  1647.            DWORD object handle of window
  1648.            BYTE     mouse row within window
  1649.            BYTE     mouse column within window
  1650.            BYTE     field mouse is on, 0 if none
  1651.            BYTE     amount moved: >0 right, <0 left, 0 done
  1652.            45h  scrolled vertically
  1653.            DWORD object hande of window
  1654.            BYTE     mouse row within window
  1655.            BYTE     mouse column within window
  1656.            BYTE     field mouse is on, 0 if none
  1657.            BYTE     amount moved: >0 down, <0 up, 0 done
  1658.            46h  window close request
  1659.            DWORD object handle of window
  1660.            BYTE     mouse pointer row
  1661.            BYTE     mouse pointer column
  1662.            BYTE     field mouse is on, 0 if none
  1663.            47h  application's windows hidden
  1664.            48h  Help for Program selected
  1665.            DWORD object handle of window
  1666.            BYTE     mouse pointer row
  1667.            BYTE     mouse pointer column
  1668.            BYTE     field mouse is on, 0 if none
  1669.            49h  pointer message sent to window
  1670.            DWORD pointer handle which received message
  1671.            4Ah  switched to window from another ("raise")
  1672.            4Bh  switched away from the window ("lower")
  1673.            4Ch  video mode changed
  1674.            BYTE new BIOS video mode
  1675.            4Dh  Scissors/cUt selected
  1676.            DWORD object handle of window
  1677.            BYTE     row of upper left corner
  1678.            BYTE     column of upper left corner
  1679.            BYTE     field number ul corner is in, 0=none
  1680.            DWORD handle of orphaned window created with
  1681.              copy of data from specified region
  1682.            BYTE     height of region
  1683.            BYTE     width of region
  1684.            4Eh  Scissors/Copy selected
  1685.            DWORD object handle of window
  1686.            BYTE     row of upper left corner
  1687.            BYTE     column of upper left corner
  1688.            BYTE     field number ul corner is in, 0=none
  1689.            DWORD handle of orphaned window created with
  1690.              copy of data from specified region
  1691.            BYTE     height of region
  1692.            BYTE     width of region
  1693.            4Fh  Scissors/Paste selected
  1694.            DWORD object handle of window
  1695.            BYTE     row of upper left corner
  1696.            BYTE     column of upper left corner
  1697.            BYTE     field number ul corner is in, 0=none
  1698.            DWORD handle of orphaned window with data
  1699.            BYTE     height of region
  1700.            BYTE     width of region
  1701.             Note: orphaned data window should be adopted or freed
  1702.                 when done
  1703.            50h  main menu about to pop up
  1704.            51h  main menu popped down
  1705. Return: all registers unchanged
  1706. ----------1512--BH06-------------------------
  1707. INT 15 - DESQview 2.2+ - SEND MESSAGE - "SETPRI" - SET PRIORITY WITHIN OBJECTQ
  1708.     AH = 12h
  1709.     BH = 06h
  1710.     BL = object
  1711.         00h object handle in DWORD on top of stack
  1712.         mailbox, keyboard, pointer, or timer
  1713.         04h given task's keyboard (task's handle on top of stack)
  1714.         05h current task's default keyboard
  1715.     STACK: DWORD new priority of object in task's OBJECTQ 
  1716. Notes:    initially all objects have the same default value.  Should only make 
  1717.       relative adjustments to this default value.
  1718.     when changing priorities, all objects already on the objectq are
  1719.       reordered
  1720. SeeAlso: AH=12h/BH=07h
  1721. ----------1512--BH07-------------------------
  1722. INT 15 - DESQview 2.2+ - SEND MESSAGE - "GETPRI" - GET PRIORITY WITHIN OBJECTQ
  1723.     AH = 12h
  1724.     BH = 07h
  1725.     BL = object
  1726.         00h object handle in DWORD on top of stack
  1727.         mailbox, keyboard, pointer, or timer
  1728.         04h given task's keyboard (task's handle on top of stack)
  1729.         05h current task's default keyboard
  1730. Return: STACK: DWORD object priority
  1731. Note:    initially all objects have the same default value.  Should only make 
  1732.       relative adjustments to this default value.
  1733. SeeAlso: AH=12h/BH=06h
  1734. ----------1512--BH08-------------------------
  1735. INT 15 - TopView - SEND MESSAGE - "SIZEOF" - GET OBJECT SIZE
  1736.     AH = 12h
  1737.     BH = 08h
  1738.     BL = object
  1739.         00h handle in DWORD on top of stack
  1740.         window: total character positions in window
  1741.         timer: elapsed time since timer started
  1742.         pointer: number of messages queued to pointer object
  1743.         panel: number of panels in panel file
  1744.         keyboard: number of input buffers queued
  1745.         01h total chars in current task's default window
  1746.         02h number of messages in task's mailbox (task's handle on stack)
  1747.         03h number of messages in current task's mailbox
  1748.         04h number of input buffers queued in task's kbd (handle on stack)
  1749.         05h number of input buffers queued for current task's default kbd
  1750.         06h number of objects queued in OBJECTQ (task's handle on stack)
  1751.         07h number of objects queued in current task's OBJECTQ
  1752.         0Ch (DV 2.26+) total chars in window owning handle on top of stack
  1753.         0Dh (DV 2.26+) total chars in parent task's window
  1754. Return: DWORD on top of stack is result
  1755. Note:    for panel objects, a count of zero is returned if no panel file is open
  1756.       for the object
  1757. SeeAlso: AH=12h/BH=04h,AH=12h/BH=09h
  1758. ----------1512--BH09-------------------------
  1759. INT 15 - TopView - SEND MESSAGE - "LEN" - GET OBJECT LENGTH
  1760.     AH = 12h
  1761.     BH = 09h
  1762.     BL = object
  1763.         00h handle in DWORD on top of stack
  1764.         window: get chars/line
  1765.         timer: get 1/100 seconds remaining before timer expires
  1766.         01h get number of chars/line in current task's default window
  1767.         0Ch (DV 2.26+) get chars/line in window owning handle on top of stk
  1768.         0Dh (DV 2.26+) get chars/line in parent task's window
  1769. Return: DWORD on top of stack is length
  1770. SeeAlso: AH=12h/BH=08h
  1771. ----------1512--BH0A-------------------------
  1772. INT 15 - TopView - SEND MESSAGE - "ADDTO" - WRITE CHARS AND ATTRIBS TO WINDOW
  1773.     AH = 12h
  1774.     BH = 0Ah
  1775.     BL = window to write to
  1776.         00h window handle is DWORD on top of stack
  1777.         01h current task's default window
  1778.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  1779.         0Dh (DV 2.26+) default window of parent of current task
  1780.     STACK:    DWORD count of attributes
  1781.         DWORD address of attribute string
  1782.         DWORD count of characters
  1783.         DWORD address of character string
  1784. Notes:    if one string is longer than the other, the shorter one will be reused
  1785.       until the longer one is exhausted
  1786.     the cursor is left just after the last character written
  1787. SeeAlso: AH=12h/BH=0Bh"WINDOW"
  1788. ----------1512--BH0A-------------------------
  1789. INT 15 - TopView - SEND MESSAGE - "ADDTO" - SEND MAILBOX MESSAGE/STAT BY VALUE
  1790.     AH = 12h
  1791.     BH = 0Ah
  1792.     BL = mailbox to write to
  1793.         00h handle is DWORD on top of stack
  1794.         02h default mailbox of task whose handle is on top of stack
  1795.         03h current task's default mailbox
  1796.     STACK:    DWORD    status (low byte)
  1797.         DWORD    length of message
  1798.         DWORD    address of message
  1799. Notes:    the message is copied into either system or common memory
  1800.     insufficient memory normally causes the process to be aborted; under
  1801.       DESQview 2.2+, failed writes may return CF set instead (see AX=DE15h)
  1802. SeeAlso: AH=12h/BH=0Bh"MAILBOX"
  1803. ----------1512--BH0A-------------------------
  1804. INT 15 - TopView - SEND MESSAGE - "ADDTO" - SET OBJECT BITS
  1805.     AH = 12h
  1806.     BH = 0Ah
  1807.     BL = object
  1808.         00h handle is DWORD on top of stack
  1809.         timer: start timer for specified interval
  1810.         pointer: set control flags
  1811.         keyboard: set control flags
  1812.         04h set control flags on KEYBOARD object (handle on top of stack)
  1813.         05h set control flags on task's default KEYBOARD object
  1814.     STACK: (if timer)   DWORD duration in 1/100 seconds
  1815.            (otherwise)  DWORD bits to set
  1816. SeeAlso: AH=12h/BH=0Bh"OBJECT"
  1817.  
  1818. For keyboard objects, the bits have the following significance:
  1819.     bit 15 reserved, can't be set
  1820.     bit 14 unused
  1821.     bit 13 reserved, can't be set
  1822.     bit 12-6 unused
  1823.     bit 5  (DV 2.2+) exclusive input
  1824.     bit 4  filter all keys (used with handler established by SETESC)
  1825.         if 0, only keys that would normally be displayed are filtered
  1826.     bit 3  program continues executing while input in progress
  1827.     bit 2  insert mode active for field mode
  1828.     bit 1  hardware cursor displayed when task is hardware cursor owner
  1829.         must be set if keyboard in field mode and field table includes
  1830.         input fields
  1831.     bit 0  keyboard is in field mode rather than keystroke mode
  1832.  
  1833. For pointer objects, the bits have the following significance:
  1834.     bit 15 reserved, can't be set
  1835.     bit 14-8 unused
  1836.     bit 7  mouse pointer is hidden while in window
  1837.     bit 6  get messages even if window not topmost
  1838.     bit 5  get messages even if window not foreground
  1839.     bit 4  multiple clicks separated by less than 1/3 second are counted
  1840.         and returned in a single message
  1841.     bit 3  pointer position is relative to screen origin, not window origin
  1842.     bit 2  send message on button release as well as button press
  1843.     bit 1  (DV 2.23+) send message with row=FFFFh and col=FFFFh whenever
  1844.         pointer leaves the window
  1845.     bit 0  send message only on button activity, not movement
  1846.            DV-specific, and INT 15h/AX=DE0Fh must have been called first
  1847. ----------1512--BH0B-------------------------
  1848. INT 15 - TopView - SEND MESSAGE - "SUBFROM" - WRITE ATTRIBUTES TO WINDOW
  1849.     AH = 12h
  1850.     BH = 0Bh
  1851.     BL = window to write attributes to
  1852.         00h handle is DWORD on top of stack
  1853.         01h current task's default window
  1854.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  1855.         0Dh (DV 2.26+) default window of parent of current task
  1856.     STACK:    DWORD number of attributes to write
  1857.         DWORD address of attributes
  1858. Note:    the attributes are written starting at the current cursor position; the
  1859.       cursor is left just after the last position written
  1860. SeeAlso: AH=12h/BH=0Ah"WINDOW"
  1861. ----------1512--BH0B-------------------------
  1862. INT 15 - TopView - SEND MESSAGE - "SUBFROM" - SEND MAILBOX MESSAGE/STAT BY REF
  1863.     AH = 12h
  1864.     BH = 0Bh
  1865.     BL = mailbox to write to
  1866.         00h handle is DWORD on top of stack
  1867.         02h default mailbox of task whose handle is on top of stack
  1868.         03h current task's default mailbox
  1869.     STACK:    DWORD    status (low byte)
  1870.         DWORD    length of message
  1871.         DWORD    address of message
  1872. Notes:    only a pointer to the message is stored, but the write may still fail
  1873.       due to insufficient memory
  1874.     under DV 2.2+, failed mailbox writes may return CF set (see AX=DE15h)
  1875. SeeAlso: AH=12h/BH=0Ah"MAILBOX"
  1876. ----------1512--BH0B-------------------------
  1877. INT 15 - TopView - SEND MESSAGE - "SUBFROM" - REMOVE OBJECT FROM OBJECTQ
  1878.     AH = 12h
  1879.     BH = 0Bh
  1880.     BL = OBJECTQ from which to remove all copies of a particular object
  1881.         06h OBJECTQ of task whose handle is on top of stack
  1882.         07h task's default OBJECTQ
  1883.     STACK:    DWORD    handle of object to remove
  1884. Note:    should be sent whenever an object is erased or closed
  1885. ----------1512--BH0B-------------------------
  1886. INT 15 - TopView - SEND MESSAGE - "SUBFROM" - RESET OBJECT BITS
  1887.     AH = 12h
  1888.     BH = 0Bh
  1889.     BL = object
  1890.         00h handle is DWORD on top of stack
  1891.         pointer: reset control flags
  1892.         keyboard: reset control flags
  1893.         04h clear control flags on KEYBOARD object (handle on top of stack)
  1894.         05h clear control flags on task's default KEYBOARD object
  1895.     STACK:    DWORD    which bits to clear (see AH=12h/BH=0Ah"OBJECT")
  1896. SeeAlso: AH=12h/BH=0Ah"OBJECT"
  1897. ----------1512--BH0C-------------------------
  1898. INT 15 - TopView - SEND MESSAGE - "OPEN" - OPEN OBJECT
  1899.     AH = 12h
  1900.     BH = 0Ch
  1901.     BL = object
  1902.         00h handle is DWORD on top of stack
  1903.         window:      fill with given character from scroll origin to end
  1904.         keyboard: attach to a window
  1905.         timer:      open
  1906.         pointer:  start taking input for window
  1907.         panel:      associate with a panel file
  1908.         01h fill task's default window with given char from scrl org to end
  1909.         02h open given task's mailbox for input (task's handle on stack)
  1910.         03h open current task's mailbox
  1911.         04h attach a KEYBOARD to a window (handle on top of stack)
  1912.         05h attach task's default KEYBOARD to a window
  1913.         06h open a task's OBJECTQ (task's handle on top of stack)
  1914.         07h open current task's OBJECTQ
  1915.         0Ch (DV 2.26+) fill def window of task owning handle on top of stck
  1916.         0Dh (DV 2.26+) fill default window of parent of current task
  1917.      STACK: (if window)   DWORD character to fill with
  1918.         (if keyboard) DWORD handle of window to attach to
  1919.         (if pointer)  DWORD handle of window to attach to
  1920.         (if panel)    DWORD length of filename or resident panel
  1921.                   DWORD address of filename or resident panel
  1922.         (otherwise)   nothing
  1923. Notes:    if first byte of panel file name is 1Bh, then the "name" IS a panel
  1924.     if first two bytes of panel file "name" are C0hC3h, then the "name" IS
  1925.       the panel file
  1926.     result code of open may be retrieved with STATUS message
  1927.     logical cursor is left at scroll origin after filling window
  1928.     the task opening a mailbox becomes its owner, and the only task allowed
  1929.       to read the mailbox
  1930.     messages are only sent to a pointer object when the mouse is positioned
  1931.       in the window to which the pointer has been attached
  1932.     there is no need to explicitly open a timer object, as ADDTO and WRITE
  1933.       messages automatically open the timer
  1934. SeeAlso: AH=12h/BH=0Dh,AH=12h/BH=14h"LOCK"
  1935. ----------1512--BH0D-------------------------
  1936. INT 15 - TopView - SEND MESSAGE - "CLOSE" - CLOSE OBJECT
  1937.     AH = 12h
  1938.     BH = 0Dh
  1939.     BL = object
  1940.         00h handle is DWORD on top of stack
  1941.         timer:      close
  1942.         keyboard: detach from window and discard queued input
  1943.         pointer:  stop taking input
  1944.         panel:      close
  1945.         mailbox:  close, unlock, and discard any pending messages
  1946.         02h close given task's mailbox (task's handle on top of stack)
  1947.         03h close task's default mailbox
  1948.         04h close KEYBOARD object (handle on top of stack)
  1949.         05h close task's default KEYBOARD
  1950.         06h close givent task's OBJECTQ (task's handle on top of stack)
  1951.         07h close current task's OBJECTQ
  1952. Notes:    when an OBJECTQ is closed, each object in the OBJECTQ is sent an
  1953.       ERASE message (AH=12h/BH=0Eh)
  1954.     when a panel object is closed, the panel file and any panels currently
  1955.       in use are freed; window and keyboard objects created by APPLY are
  1956.       not affected, but field mode input ceases
  1957.     open but idle timer objects consume a small amount of CPU time
  1958. SeeAlso: AH=12h/BH=0Ch,AH=12h/BH=0Eh,AH=12h/BH=14h"LOCK"
  1959. ----------1512--BH0E-------------------------
  1960. INT 15 - TopView - SEND MESSAGE - "ERASE" - ERASE OBJECT
  1961.     AH = 12h
  1962.     BH = 0Eh
  1963.     BL = object
  1964.         00h handle is DWORD on top of stack
  1965.         window:      clear from scroll origin to end of window
  1966.         keyboard: discard input
  1967.         timer:      cancel current interval
  1968.         pointer:  discard all pending messages
  1969.         mailbox:  discard all pending messages
  1970.         01h clear task's default window from scroll origin to end
  1971.         02h discard all queued messages in mailbox (handle on top of stack)
  1972.         03h discard all queued messages in current task's default mailbox
  1973.         04h discard all input queued to KEYBOARD (handle on top of stack)
  1974.         05h discard all input queued to task's default KEYBOARD
  1975.         06h remove all objects from OBJECTQ (task's handle on top of stack)
  1976.         07h remove all objects from current task's OBJECTQ
  1977.         0Ch (DV 2.26+) clear window of task owning handle on top of stack
  1978.         0Dh (DV 2.26+) clear default window of parent of current task
  1979. Note:    when an OBJECTQ is erased, each object in the OBJECTQ is also erased
  1980. SeeAlso: AH=12h/BH=02h
  1981. ----------1512--BH0F-------------------------
  1982. INT 15 - TopView - SEND MESSAGE - "STATUS" - GET OBJECT STATUS
  1983.     AH = 12h
  1984.     BH = 0Fh
  1985.     BL = object
  1986.         00h handle is DWORD on top of stack
  1987.         timer:     is it running?
  1988.         pointer: return status of last message
  1989.         panel:     verify success of last OPEN or APPLY
  1990.         02h return status of last msg READ from mailbox (handle on stack)
  1991.         03h return status of last msg READ from task's default mailbox
  1992.         04h get status of last msg from task's KEYBOARD (task handle on stk)
  1993.         05h get status of last msg from task's default KEYBOARD
  1994.         06h return whether OBJECTQ is open or not (handle on top of stack)
  1995.         07h return whether task's default OBJECTQ is open or not
  1996. Return: DWORD on top of stack is status
  1997. Notes:    if object is a panel object, the status indicates the error code:
  1998.       00h successful
  1999.       14h panel name not in panel directory
  2000.       15h not enough memory to apply panel
  2001.       16h invalid panel format
  2002.       17h panel file already open
  2003.       81h-92h  DOS error codes+80h            \  codes > 80h indicate
  2004.       95h not enough memory to open panel file     > that the panel was
  2005.       98h null panel file name            /  not opened
  2006.     if object is a timer, the status is:
  2007.       00000000h open but not running
  2008.       40000000h open and running
  2009.       80000000h closed
  2010.     if object is an OBJECTQ, the status is:
  2011.       00000000h open
  2012.       80000000h closed
  2013.     if object is a keyboard in keystroke mode, the status is the extended
  2014.       character code (scan code) of teh last keystroke
  2015.     if object is a keyboard in field mode, the status indicates the reason
  2016.       for the last return from the field manager
  2017.       00h Enter key pressed
  2018.       01h Button 1 or keystroke selection
  2019.       02h Button 2
  2020.       03h validation
  2021.       04h auto Enter on field
  2022.       1Bh Escape pressed
  2023.       46h ^Break pressed
  2024.       other: extended code for key terminating input
  2025.     the status of mailbox messages sent by the window manager is always 80h
  2026.     the status of a pointer message is the same as the status field in the
  2027.       message
  2028. SeeAlso: AH=12h/BH=04h"READ"
  2029. ----------1512--BH10-------------------------
  2030. INT 15 - TopView - SEND MESSAGE - "EOF" - GET OBJECT EOF STATUS
  2031.     AH = 12h
  2032.     BH = 10h
  2033.     BL = object
  2034.         00h handle is DWORD on top of stack
  2035.         window: return TRUE if logical cursor past end of window
  2036.         mailbox: ???
  2037.         01h returns TRUE if logical cursor past end of task's def window
  2038.         02h return ??? for task's mailbox (task's handle on top of stack)
  2039.         03h return ??? for current task's mailbox
  2040.         0Ch (DV 2.26+) check log crsr of window owning handle on top of stk
  2041.         0Dh (DV 2.26+) check log cursor of window of parent task
  2042. Return: DWORD on top of stack is status
  2043. ----------1512--BH11-------------------------
  2044. INT 15 - TopView - SEND MESSAGE - "AT" - POSITION OBJECT CURSOR
  2045.     AH = 12h
  2046.     BH = 11h
  2047.     BL = window for which to move cursor
  2048.         00h window's handle is DWORD on top of stack
  2049.         01h task's default window
  2050.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  2051.         0Dh (DV 2.26+) default window of parent of current task
  2052.     STACK: DWORD column
  2053.            DWORD row
  2054. ----------1512--BH11-------------------------
  2055. INT 15 - TopView - SEND MESSAGE - "SETNAME" - ASSIGN NAME TO MAILBOX
  2056.     AH = 12h
  2057.     BH = 11h
  2058.     BL = mailbox to name
  2059.         00h DWORD on top of stack is mailbox handle
  2060.         02h use given task's mailbox (task's handle on top of stack)
  2061.         03h use current task's default mailbox
  2062.     STACK: DWORD length of name
  2063.            DWORD address of name
  2064. SeeAlso: AX=DE0Eh
  2065. ----------1512--BX1100-----------------------
  2066. INT 15 - TopView - SEND MESSAGE - "SETSCALE" - SET POINTER SCALE FACTOR
  2067.     AH = 12h
  2068.     BX = 1100h
  2069.     STACK: DWORD object handle for pointer object
  2070.            DWORD number of colums to scale pointer position to
  2071.            DWORD number of rows to scale pointer position to
  2072. SeeAlso: AH=12h/BX=1200h
  2073. ----------1512--BH12-------------------------
  2074. INT 15 - TopView - SEND MESSAGE - "READN" - GET NEXT N OBJECT BYTES
  2075.     AH = 12h
  2076.     BH = 12h
  2077.     BL = window to read from
  2078.         00h handle is DWORD on top of stack
  2079.         01h read next N chars or attributes on task's default window
  2080.         0Ch (DV 2.26+) read window of task owning handle on top of stack
  2081.         0Dh (DV 2.26+) read default window of parent of current task
  2082.     STACK: DWORD count
  2083. Return: STACK: DWORD width of screen line
  2084.            DWORD address
  2085.            DWORD count actually read
  2086. Notes:    reading starts at the current logical cursor position; the cursor is
  2087.       updated to point at the character following the last one read
  2088.     any translucent blanks (FFh) which are visible on screen are changed
  2089.       to the character which is seen through them
  2090.     the string produced by the read is placed in an input buffer which may
  2091.       be reused by the next READ or READN of a window
  2092.     window stream opcodes D8h and D9h determine whether the read returns
  2093.       characters or attributes
  2094. SeeAlso: AH=12h/BH=04h"WINDOW",AH=12h/BH=05h"WINDOW"
  2095. ----------1512--BX1200-----------------------
  2096. INT 15 - TopView - SEND MESSAGE - "GETSCALE" - GET POINTER SCALE FACTOR
  2097.     AH = 12h
  2098.     BX = 1200h
  2099.     STACK: DWORD object handle for pointer
  2100. Return: STACK: DWORD pointer pos scaled as if window were this many colums wide
  2101.            DWORD pointer pos scaled as if window were this many rows high
  2102. SeeAlso: AH=12h/BX=1100h
  2103. ----------1512--BH13-------------------------
  2104. INT 15 - TopView - SEND MESSAGE - "REDRAW" - REDRAW WINDOW
  2105.     AH = 12h
  2106.     BH = 13h
  2107.     BL = window object
  2108.         00h DWORD on top of stack is handle for window to redraw
  2109.         01h redraw task's default window
  2110.         0Ch (DV 2.26+) redraw window of task owning handle on top of stack
  2111.         0Dh (DV 2.26+) redraw default window of parent of current task
  2112. SeeAlso: AH=12h/BH=0Eh
  2113. ----------1512--BX1300-----------------------
  2114. INT 15 - TopView - SEND MESSAGE - "SETICON" - SPECIFY POINTER ICON
  2115.     AH = 12h
  2116.     BX = 1300h
  2117.     STACK: DWORD object handle for pointer
  2118.            DWORD character to use for pointer
  2119. ----------1512--BH14-------------------------
  2120. INT 15 - TopView - SEND MESSAGE - "SETESC" - SET ESCAPE ROUTINE ADDRESS
  2121.     AH = 12h
  2122.     BH = 14h
  2123.     BL = message modifier
  2124.         00h handle is DWORD on top of stack
  2125.         01h define user stream
  2126.         04h intercept keystrokes from KEYBOARD to a window (handle on stack)
  2127.         05h intercept keystrokes from task's default KEYBOARD to a window
  2128.     STACK: (if window)   DWORD user stream number (14h-1Fh)
  2129.                  DWORD address of FAR user stream handler
  2130.            (if keyboard) DWORD address of FAR filter function
  2131.  
  2132. The keyboard filter function is called when the keyboard is in field mode.  On
  2133. entry,
  2134.     AL = character
  2135.     AH = 00h or extended ASCII code if AL = 00h
  2136.     BL = field number
  2137.     CH = cursor column
  2138.     CL = cursor row
  2139.     DL = field type modifier (sixth item in field table entry)
  2140.     DH = seventh item in field table entry
  2141.     ES:SI = window's handle
  2142.     DS:DI -> field table entry for field containing the cursor
  2143. The filter function should return
  2144.     AH = 00h use keystroke
  2145.          01h ignore keystroke
  2146.          FFh beep and ignore keystroke
  2147. Note: the filter function is not allowed to make INT 15, DOS, or BIOS calls
  2148. ----------1512--BH14-------------------------
  2149. INT 15 - TopView - SEND MESSAGE - "LOCK" - REQUEST EXCLUSIVE ACCESS TO RESOURCE
  2150.     AH = 12h
  2151.     BH = 14h
  2152.     BL = object
  2153.         00h mailbox handle is DWORD on top of stack
  2154.         02h use given task's mailbox (task's handle on top of stack)
  2155.         03h use current task's default mailbox
  2156. Note:    release exclusive access by sending CLOSE message to mailbox
  2157.     access may be requested multiple times, and requires multiple CLOSEs
  2158. SeeAlso: AH=12h/BH=0Dh
  2159. ----------1512--BH15-------------------------
  2160. INT 15 - DESQview 2.2+ - SEND MESSAGE - "SETFLAGS" - SET OBJECT FLAGS
  2161.     AH = 12h
  2162.     BH = 15h
  2163.     BL = object
  2164.         00h DWORD on top of stack
  2165.         mailbox, keyboard, or pointer only
  2166.         02h mailbox for task whose handle is on top of stack
  2167.         03h mailbox for current task
  2168.         04h keyboard for task whose handle is on top of stack
  2169.         05h keyboard for current task
  2170.     STACK: DWORD flags
  2171.         if mailbox:
  2172.             bit 0: all mail messages in common memory
  2173.             bit 1: allow write even if closed
  2174.             bit 2: don't erase messages when mailbox closed
  2175.         if keyboard:
  2176.             bit 5: exclusive input when keyboard in use for input
  2177. Return: nothing
  2178. Notes:    only available if the API level has been set to at least 2.20
  2179.     equivalent to performing SUBFROM and ADDTO calls on the object
  2180. SeeAlso: AH=12h/BH=0Ah,AH=12h/BH=0Bh,AH=12h/BH=16h
  2181. ----------1512--BH16-------------------------
  2182. INT 15 - DESQview 2.2+ - SEND MESSAGE - "GETFLAGS" - GET OBJECT FLAGS
  2183.     AH = 12h 
  2184.     BH = 16h
  2185.     BL = object
  2186.         00h DWORD on top of stack
  2187.         mailbox, keyboard, or pointer only
  2188.         02h mailbox for task whose handle is on top of stack
  2189.         03h mailbox for current task
  2190.         04h keyboard for task whose handle is on top of stack
  2191.         05h keyboard for current task
  2192. Return: STACK: DWORD current control flags
  2193. Note:    only available if the API level has been set to at least 2.20
  2194. SeeAlso: AH=12h/BH=0Ah,AH=12h/BH=0Bh,AH=12h/BH=15h
  2195. ----------1513-------------------------------
  2196. INT 15 - VMiX - WAKE PROCESS
  2197.     AH = 13h
  2198.     STACK:    WORD    process ID
  2199. Return: AX = status
  2200. SeeAlso: AH=12h"VMiX"
  2201. ----------1513-------------------------------
  2202. INT 15 - MultiDOS Plus - GET TASK CONTROL BLOCK
  2203.     AH = 13h
  2204. Return: BX:AX -> task control block (see below)
  2205. SeeAlso: AH=15h"MultiDOS"
  2206.  
  2207. Format of MultiDOS Plus v4.0 task control block:
  2208. Offset    Size    Description
  2209.  00h    DWORD    pointer to next TCB
  2210.  04h  8 BYTEs    ASCIZ task name
  2211.  0Ch  2 BYTEs    ???
  2212.  0Eh    WORD    task PSP segment
  2213.  10h    WORD    abort/suspend flags
  2214.  12h    WORD    current screen segment (see AH=0Bh,AH=0Ch)
  2215.  14h    WORD    priority level (0000h-FFFEh)
  2216.  16h    WORD    time slice counter
  2217.  18h  2 BYTEs    ???
  2218.  1Ah    WORD    suspend timer value
  2219.  1Ch    WORD    stack segment
  2220.  1Eh    WORD    stack pointer
  2221.  20h    WORD    display type
  2222.  22h    WORD    display memory
  2223.  24h  2 BYTEs    ???
  2224.  26h    WORD    termination count
  2225.  28h    WORD    equipment flag for BIO10 driver
  2226.  2Ah    BYTE    background CRT mode
  2227.  2Bh    WORD    screen width in columns
  2228.  2Dh    WORD    screen size in bytes
  2229.  2Fh    WORD    segment of physical screen memory
  2230.  31h 16 BYTEs    eight cursor positions
  2231.  41h    WORD    current cursor shape
  2232.  43h    BYTE    active display page
  2233.  44h    WORD    CRT controller I/O port base
  2234.  46h  2 BYTEs    ???
  2235.  48h    WORD    foreground task flag
  2236.  4Ah  6 BYTEs    ???
  2237.  50h    WORD    saved video segment (see AH=0Bh,AH=0Ch)
  2238.  52h    DWORD    old INT 22
  2239.  56h    DWORD    old INT 23
  2240.  5Ah    DWORD    old INT 24
  2241.  5Eh    WORD    top of memory for task
  2242.  60h  4 BYTEs    ???
  2243.  64h    WORD    DTA segment (see INT 21/AH=1Ah)
  2244.  66h    WORD    DTA offset
  2245.  68h  4 BYTEs    ???
  2246.  6Ch    BYTE    current ANSI.SYS attribute
  2247.  6Dh    BYTE    current ANSI.SYS column
  2248.  6Eh    BYTE    current ANSI.SYS row
  2249.  6Fh    BYTE    current ANSI.SYS display state
  2250.  70h    BYTE    maximum ANSI.SYS columns
  2251.  71h    BYTE    current ANSI.SYS page
  2252.  72h    WORD    saved ANSI.SYS cursor position
  2253.  74h    BYTE    ANSI.SYS parameter buffer index
  2254.  75h    BYTE    current ANSI.SYS screen mode
  2255.  76h    BYTE    ANSI.SYS wrap flag
  2256.  77h  6 BYTEs    ANSI.SYS parameter buffer
  2257.  7Dh    BYTE    ANSI.SYS keyboard DSR state
  2258.  7Eh  7 BYTEs    ANSI.SYS keyboard DSR buffer
  2259.  85h  3 BYTEs    ???
  2260.  88h 16 BYTEs    request header for DOS driver calls
  2261.  98h 14 BYTEs    ???
  2262.  A6h    WORD    segment of EMS map if EMS task
  2263.  A8h    WORD    flag: task makes EMS calls
  2264.  AAh    WORD    EMS handle for task
  2265.  ACh    WORD    keyboard shift state
  2266.  AEh 12 BYTEs    ???
  2267.  BAh    WORD    TCB of parent if child task
  2268.  BCh    WORD    termination code
  2269.  BEh    WORD    COM port number
  2270.  C0h  4 BYTEs    ???
  2271.  C4h    WORD    current IRQ number
  2272.  C6h  2 BYTEs    ???
  2273.  C8h    WORD    miscellaneous flag word
  2274.  CAh  2 BYTEs    ???
  2275.  CCh    DWORD    old INT 10
  2276.  D0h    WORD    EMS alternate map set number
  2277.  D2h 414 BYTEs    DOS current disk and directory context (optional)
  2278. ----------1514-------------------------------
  2279. INT 15 - VMiX - CLEAR WINDOW
  2280.     AH = 14h
  2281.     STACK:    WORD    top left corner of window
  2282.         WORD    bottom right corner of window
  2283. Return: AX = status
  2284. SeeAlso: AH=15h"VMiX"
  2285. ----------1514-------------------------------
  2286. INT 15 - MultiDOS Plus - CHECK IF MultiDOS FOREGROUND OR BACKGROUND
  2287.     AH = 14h
  2288. Return: AX = current state
  2289.         0000h MultiDOS Plus command prompt is background task
  2290.         0001h command prompt is foreground task
  2291. SeeAlso: AH=0Bh"MultiDOS"
  2292. ----------1515-------------------------------
  2293. INT 15 - VMiX - SET BANNER WINDOW MESSAGE
  2294.     AH = 15h
  2295.     STACK:    DWORD    pointer to ASCIZ banner    message
  2296. Return: AX = status
  2297. SeeAlso: AH=14h"VMiX"
  2298. ----------1515-------------------------------
  2299. INT 15 - MultiDOS Plus - GET SYSTEM BLOCK
  2300.     AH = 15h
  2301. Return: BX:AX -> system block (see below)
  2302. SeeAlso: AH=13h"MultiDOS"
  2303.  
  2304. Format of MultiDOS Plus 4.0 system block:
  2305. Offset    Size    Description
  2306.  00h    WORD    segment of system control block
  2307.  02h    WORD    redirection flag set by /NOREDIRECT
  2308.  04h    WORD    no-INT 10 flag set by /NO10
  2309.  06h    DWORD    old INT 10
  2310.  0Ah    DWORD    new INT 10
  2311.  0Eh    DWORD    pointer to WORD with current TCB offset (see AH=13h)
  2312.  12h    DWORD    pointer to WORD with idle task TCB offset
  2313.  16h    DWORD    pointer to WORD with foreground TCB offset
  2314.  1Ah    DWORD    pointer to WORD with MultiDOS TCB offset
  2315.  1Eh    WORD    Task Control Block size
  2316.  20h    WORD    number of TCBs
  2317.  22h    WORD    flag: EMS present
  2318.  24h    WORD    EMS page frame base segment
  2319.  26h    WORD    16K pages in EMS page frame
  2320.  28h    WORD    base segment for conventional memory tasks
  2321.  2Ah    WORD    conventional memory size in paragraphs
  2322.  2Ch    DWORD    pointer to list of queue pointers
  2323. ----------1516-------------------------------
  2324. INT 15 - VMiX - SET ROOT WINDOW SIZE AND HOME CURSOR
  2325.     AH = 16h
  2326.     STACK:    DWORD    pointer to I/O Request Packet
  2327.         WORD    top left corner of window
  2328.         WORD    bottom right corner of window
  2329. Return: AX = status
  2330. SeeAlso: AH=17h"VMiX"
  2331. ----------1516-------------------------------
  2332. INT 15 - MultiDOS Plus - INITIALIZATION
  2333.     AH = 16h
  2334. Note:    used internally during initialization; any other calls will cause
  2335.       unpredicatable results
  2336. ----------1517-------------------------------
  2337. INT 15 - VMiX - GET CONSOLE WINDOW COLORS
  2338.     AH = 17h
  2339. Return: AH = foreground color
  2340.     AL = background color
  2341. SeeAlso: AH=16h"VMiX",AH=18h"VMiX"
  2342. ----------1517-------------------------------
  2343. INT 15 - MultiDOS Plus - MAP IRQ
  2344.     AH = 17h
  2345.     AL = IRQ to map (01h-0Fh)
  2346.     BX = offset of task control block (see AH=13h) to associate with IRQ
  2347. Return: AX = status
  2348.         0000h successful
  2349.         other invalid IRQ
  2350. Note:    the EMS map of the specified TCB is associated with the given interrupt
  2351. SeeAlso: AH=18h"MultiDOS",AH=19h"MultiDOS"
  2352. ----------1518-------------------------------
  2353. INT 15 - VMiX - SET CONSOLE COLORS
  2354.     AH = 18h
  2355.     STACK:    WORD    new background/foreground colors
  2356. Return: AX = color
  2357. SeeAlso: AH=17h"VMiX"
  2358. ----------1518-------------------------------
  2359. INT 15 - MultiDOS Plus - UNMAP IRQ
  2360.     AH = 18h
  2361.     AL = IRQ to unmap (01h-0Fh)
  2362. Return: AX = status
  2363.         0000h successful
  2364.         0001h invalid IRQ
  2365. Note:    results are unpredictable if the IRQ has not been mapped
  2366. SeeAlso: AH=17h"MultiDOS",AH=19h"MultiDOS"
  2367. ----------1519-------------------------------
  2368. INT 15 - VMiX v2+ - ???
  2369.     AH = 19h
  2370.     STACK: WORD ???
  2371. Return: ???
  2372. ----------1519-------------------------------
  2373. INT 15 - MultiDOS Plus - UNMAP ALL IRQs
  2374.     AH = 19h
  2375. Return: AX destroyed
  2376. Note:    for MultiDOS internal use only
  2377. SeeAlso: AH=17h"MultiDOS",AH=18h"MultiDOS"
  2378. ----------151A-------------------------------
  2379. INT 15 - VMiX v2+ - ???
  2380.     AH = 1Ah
  2381.     STACK: 3 WORDs ???
  2382. Return: ???
  2383. ----------151A-------------------------------
  2384. INT 15 - MultiDOS Plus - MAP SEMAPHORE NAME TO NUMBER
  2385.     AH = 1Ah
  2386.     DS:SI -> 8-byte name
  2387. Return: AL = status
  2388.         00h successful
  2389.             AH = semaphore number (20h-3Fh)
  2390.         04h out of string space
  2391. Notes:    all eight bytes of the name are significant
  2392.     if the name does not already exist, it is added to the name table and
  2393.       associated with a free semaphore number
  2394.     names cannot be destroyed
  2395. SeeAlso: AH=1Bh"MultiDOS",AH=1Ch"MultiDOS",AH=1Dh"MultiDOS"
  2396. ----------151B-------------------------------
  2397. INT 15 - VMiX v2+ - ???
  2398.     AH = 1Bh
  2399.     STACK: 5 WORDs ???
  2400. Return: ???
  2401. ----------151B-------------------------------
  2402. INT 15 - MultiDOS Plus - REQUEST RESOURCE SEMAPHORE BY NAME
  2403.     AH = 1Bh
  2404.     DS:SI -> 8-byte name
  2405. Return: AH = status
  2406.         00h successful
  2407.         02h invalid semaphore number
  2408.         03h caller already owns semaphore
  2409.         04h out of string space
  2410. Notes:    (see notes for AH=01h"MultiDOS")
  2411.     equivalent to AH=1Ah followed by AH=01h
  2412. SeeAlso: AH=01h"MultiDOS",AH=1Ah"MultiDOS",AH=1Ch"MultiDOS",AH=1Dh"MultiDOS"
  2413. ----------151C-------------------------------
  2414. INT 15 - VMiX v2+ - ???
  2415.     AH = 1Ch
  2416.     STACK: 5 WORDs ???
  2417. Return: ???
  2418. ----------151C-------------------------------
  2419. INT 15 - MultiDOS Plus - RELEASE RESOURCE SEMAPHORE BY NAME
  2420.     AH = 1Ch
  2421.     DS:SI -> 8-byte name
  2422. Return: AH = status
  2423.         00h successful
  2424.         01h not semaphore owner
  2425.         02h invalid semaphore number
  2426.         04h out of string space
  2427. Notes:    (see notes for AH=02h"MultiDOS")
  2428.     equivalent to AH=1Ah followed by AH=02h
  2429. SeeAlso: AH=02h"MultiDOS",AH=1Ah"MultiDOS",AH=1Bh"MultiDOS",AH=1Dh"MultiDOS"
  2430. ----------151D-------------------------------
  2431. INT 15 - VMiX v2+ - ???
  2432.     AH = 1Dh
  2433.     ???
  2434. Return: ???
  2435. ----------151D-------------------------------
  2436. INT 15 - MultiDOS Plus - TEST RESOURCE SEMAPHORE BY NAME
  2437.     AH = 1Dh
  2438.     DS:SI -> 8-byte name
  2439. Return; AH = status
  2440.         00h semaphore not in use
  2441.         01h semaphore owned by another task
  2442.         02h invalid semaphore number
  2443.         03h caller owns semaphore
  2444.         04h out of string space
  2445. Notes:    (see notes for AH=10h"MultiDOS")
  2446.     equivalent to AH=1Ah followed by AH=10h
  2447. SeeAlso: AH=10h"MultiDOS",AH=1Ah"MultiDOS",AH=1Bh"MultiDOS",AH=1Ch"MultiDOS"
  2448. ----------151E-------------------------------
  2449. INT 15 - VMiX v2+ - ???
  2450.     AH = 1Eh
  2451.     STACK: WORD ???
  2452. Return: ???
  2453. ----------151E00-----------------------------
  2454. INT 15 - MultiDOS Plus - CLEAR EVENT COUNTER
  2455.     AX = 1E00h
  2456.     DX = event/trigger number (00h-3Fh)
  2457. Return: AH = status
  2458.         00h successful
  2459. SeeAlso: AX=1E01h,AX=1E02h
  2460. ----------151E01-----------------------------
  2461. INT 15 - MultiDOS Plus - TRIGGER EVENT
  2462.     AX = 1E01h
  2463.     DX = event/trigger number (00h-3Fh)
  2464. Return: AH = status
  2465.         00h successful
  2466.         01h invalid event/trigger number
  2467. Notes:    schedules any task waiting for event; if no task is waiting, the event
  2468.       counter is incremented (and will roll over if it was 65535)
  2469.     may be invoked by interrupt handler
  2470. SeeAlso: AX=1E00h,AX=1E02h
  2471. ----------151E02-----------------------------
  2472. INT 15 - MultiDOS Plus - WAIT FOR EVENT
  2473.     AX = 1E02h
  2474.     DX = event/trigger number (00h-3Fh)
  2475. Return: AH = status
  2476.         00h successful
  2477.         01h invalid event/trigger number
  2478. Note:    if the event counter is zero, the task is suspended until the event is
  2479.       triggered with AX=1E01h; else, the counter is decremented and the
  2480.       call returns immediately
  2481. SeeAlso: AX=1E00h,AX=1E01h
  2482. ----------151F-------------------------------
  2483. INT 15 - MultiDOS Plus 4.01 - GET MEMORY PARAMETERS
  2484.     AH = 1Fh
  2485. Return: BX = first segment of conventional memory
  2486.     DX = first segment of EMS swap frame into which MultiDOS will load
  2487.         programs
  2488. ----------1520-------------------------------
  2489. INT 15 - MultiDOS Plus 4.01 - CHECK IF MULTITASKING ENABLED
  2490.     AH = 20h
  2491. Return: AX = current state
  2492.         0000h multitasking enabled
  2493.         other TCB of task that disabled multitasking
  2494. SeeAlso: AH=0Dh"MultiDOS",AH=13h"MultiDOS"
  2495. ----------152000-----------------------------
  2496. INT 15 - DOS 3+ PRINT.COM - DISABLE CRITICAL REGION FLAG
  2497.     AX = 2000h
  2498. SeeAlso: AX=2001h
  2499. ----------152001-----------------------------
  2500. INT 15 - DOS 3+ PRINT.COM - SET CRITICAL REGION FLAG
  2501.     AX = 2001h
  2502.     ES:BX -> byte which is to be incremented while in a DOS call
  2503. SeeAlso: AX=2000h
  2504. ----------152010-----------------------------
  2505. INT 15 - OS HOOK - SETUP SYSREQ ROUTINE (AT,XT286,PS50+)
  2506.     AX = 2010h
  2507.     ???
  2508. Return: ???
  2509. SeeAlso: AX=2011h
  2510. ----------152011-----------------------------
  2511. INT 15 - OS HOOK - COMPLETION OF SYSREQ FUNCTION (AT,XT286,PS50+)
  2512.     AX = 2011h
  2513.     ???
  2514. Return: ???
  2515. SeeAlso: AX=2010h
  2516. ----------1521-------------------------------
  2517. INT 15 - SYSTEM - POWER-ON SELF-TEST ERROR LOG (PS50+)
  2518.     AH = 21h
  2519.     AL = subfunction
  2520.         00h read POST log
  2521.         01h write POST log
  2522.         BH = device ID
  2523.         BL = error code
  2524. Return: CF set on error
  2525.     AH = status (00h OK, 01h list full, 80h invalid cmd, 86h unsupported)
  2526.     if function 00h:
  2527.        BX = number of error codes stored
  2528.        ES:DI -> error log
  2529. Note:    the log is a series of words, the first byte of which identifies the
  2530.       error code and the second the device.
  2531. ----------1540-------------------------------
  2532. INT 15 - SYSTEM - READ/MODIFY PROFILES (CONVERTIBLE)
  2533.     AH = 40h
  2534.     AL = subfunction
  2535.         00h get system profile in CX and BX
  2536.         01h set system profile from CX and BX
  2537.         02h get internal modem profile in BX
  2538.         03h set internal modem profile from BX
  2539. ----------154000-----------------------------
  2540. INT 15 - Compaq SLT/286 or Portable 386 - READ LCD/PLASMA TIMEOUT
  2541.     AX = 4000h
  2542. Return: AX = 4000h
  2543.     CL = 00h timeout disabled
  2544.        else timeout in minutes
  2545. SeeAlso: AX=4001h,AX=4600h
  2546. ----------154001CL00-------------------------
  2547. INT 15 - Compaq SLT/286 or Portable 386 - SET LCD/PLASMA TIMEOUT
  2548.     AX = 4001h
  2549.     CL = 00h timeout disabled
  2550.        else     timeout in minutes
  2551. Return: AL = 00h timeout modified
  2552.          01h timeout cannot be modified
  2553.          40h timeout cannot be modified
  2554.     CL = 00h timeout disabled
  2555.        else timeout in minutes
  2556. SeeAlso: AX=4000h,AX=4601h
  2557. ----------1541-------------------------------
  2558. INT 15 - SYSTEM - WAIT ON EXTERNAL EVENT (CONVERTIBLE)
  2559.     AH = 41h
  2560.     AL = condition type
  2561.         bits 0-2: condition to wait for
  2562.              0 any external event
  2563.              1 compare and return if equal
  2564.              2 compare and return if not equal
  2565.              3 test and return if not zero
  2566.              4 test and return if zero
  2567.         bit 3:    reserved
  2568.         bit 4:    1=port address, 0=user byte
  2569.         bits 5-7: reserved
  2570.     BH = condition compare or mask value
  2571.     BL = timeout value times 55 milliseconds
  2572.         00h means no timeout
  2573.     DX = I/O port address if AL bit 4 set
  2574.     ES:DI -> user byte if AL bit 4 clear
  2575. ----------1542-------------------------------
  2576. INT 15 - SYSTEM - REQUEST POWER OFF (CONVERTIBLE)
  2577.     AH = 42h
  2578.     AL = 00h to use system profile
  2579.          01h to force suspend regardless of system profile
  2580. SeeAlso: AH=44h
  2581. ----------154280-----------------------------
  2582. INT 15 - Compaq SLT/286 - ENTER STANDBY
  2583.     AX = 4280h
  2584. Return: AH = 42h
  2585.     CF clear if successful
  2586.     CF set if unable to enter standby
  2587. SeeAlso: AX=4600h
  2588. ----------1543-------------------------------
  2589. INT 15 - SYSTEM - READ SYSTEM STATUS (CONVERTIBLE)
  2590.     AH = 43h
  2591. Return: AL = status bits
  2592.         bit 0: LCD detached
  2593.         bit 1: reserved
  2594.         bit 2: RS232/parallel adapter powered on
  2595.         bit 3: internal modem powered on
  2596.         bit 4: power activated by alarm
  2597.         bit 5: standby power lost
  2598.         bit 6: external power in use
  2599.         bit 7: power low
  2600. ----------1544-------------------------------
  2601. INT 15 - SYSTEM - (DE)ACTIVATE INTERNAL MODEM POWER (CONVERTIBLE)
  2602.     AH = 44h
  2603.     AL = 00h to power off
  2604.          01h to power on
  2605. SeeAlso: AH=42h
  2606. ----------154600-----------------------------
  2607. INT 15 - Compaq SLT/286 - READ POWER CONSERVATION/MODEM CONFIGURATION
  2608.     AX = 4600h
  2609. Return: AH = modem configuration information
  2610.         bit 0 powerup state
  2611.             0 off
  2612.             1 on
  2613.         1 modem installed
  2614.         2 IRQ line assignment
  2615.             0 IRQ 4
  2616.             1 IRQ 3
  2617.         3 COM port assignment
  2618.             0 = COM 2
  2619.             1 = COM 1
  2620.         4 modem state
  2621.             0 not assigned
  2622.             1 assigned
  2623.         5 modem is on
  2624.     AL = power conservation status information
  2625.         bit 0  power source (0 internal, 1 external)
  2626.            1-2 low battery state
  2627.             00 no low battery condition
  2628.             01 low battery 1
  2629.             10 reserved
  2630.             11 low battery 2
  2631.            3-4 power conservation mode
  2632.             00 automatic
  2633.             01 on
  2634.             10 off
  2635.             11 reserved
  2636.     BH = default system inactivity timeout (1-21 minutes)
  2637.     BL = current system inactivity timeout (1-21 minutes)
  2638.     CH = default video display inactivity timeout (1-63 minutes)
  2639.     CL = current video display inactivity timeout (1-63 minutes)        
  2640.     DH = default fixed disk drive inactivity timeout (1-21 minutes)
  2641.     DL = current fixed disk drive inactivity timeout (1-21 minutes)
  2642. SeeAlso: AX=4280h,AX=4601h,INT 77
  2643. ----------154601-----------------------------
  2644. INT 15 - Compaq SLT/286 - Modify Power Conservation/Modem Configuration
  2645.     AX = 4601h
  2646.     BL = system inactivity timeout (1-21 minutes)
  2647.        = FFh do not change
  2648.     CL = video display inactivity timeout (1-63 minutes)        
  2649.        = FFh do not change
  2650.     DL = current fixed disk drive inactivity timeout (1-21 minutes)
  2651.        = FFh do not change
  2652.     DH = 00h turn modem OFF
  2653.        = 01h turn modem ON
  2654.        = FFh do not change modem state
  2655. Return: CF clear if successful
  2656.         AH = 00h
  2657.         BL = current system inactivity timeout (1-21 minutes)
  2658.         CL = current video display inactivity timeout (1-63 minutes)    
  2659.         DL = current fixed disk drive inactivity timeout (1-21 minutes)
  2660.         DH = FFh modem state unchanged
  2661.            = 00h modem turned OFF
  2662.            = 01h modem turned ON
  2663.     CF set on error
  2664.         AH = 01h input is out of range
  2665.            = 02h - No modem present
  2666. SeeAlso: AX=4600h,INT 77
  2667. ----------154F-------------------------------
  2668. INT 15 - OS HOOK - KEYBOARD INTERCEPT (AT model 3x9,XT2,XT286,CONV,PS)
  2669.     AH = 4Fh
  2670.     AL = scan code
  2671.     CF set
  2672. Return: CF set
  2673.        AL = scan code
  2674.     CF clear
  2675.        scan code should be ignored
  2676. Note:    called by INT 9 handler to translate scan codes
  2677. SeeAlso: INT 09
  2678. ----------155400-----------------------------
  2679. INT 15 - Omniview Multitasker - INSTALLATION NOTIFICATION
  2680.     AX = 5400h
  2681.     ES:BX -> device information tables
  2682.     DI:DX -> dispatcher entry point
  2683. Note:    called by OmniView to notify programs loaded before OmniView of state
  2684.       changes inside OmniView
  2685. SeeAlso: AX=5407h
  2686. ----------155401-----------------------------
  2687. INT 15 - Omniview Multitasker - PROCESS CREATION
  2688.     AX = 5401h
  2689.     ES:BX = process handle
  2690. Note:    called by OmniView to notify programs loaded before OmniView of state
  2691.       changes inside OmniView
  2692. SeeAlso: AX=5402h
  2693. ----------155402-----------------------------
  2694. INT 15 - Omniview Multitasker - PROCESS DESTRUCTION
  2695.     AX = 5402h
  2696.     ES:DX = process handle
  2697. Note:    called by OmniView to notify programs loaded before OmniView of state
  2698.       changes inside OmniView
  2699. SeeAlso: AX=5401h
  2700. ----------155403-----------------------------
  2701. INT 15 - Omniview Multitasker - SAVE
  2702.     AX = 5403h
  2703.     ES:DX = process swapping out
  2704. Note:    called by OmniView to notify programs loaded before OmniView of state
  2705.       changes inside OmniView
  2706. SeeAlso: AX=5404h
  2707. ----------155404-----------------------------
  2708. INT 15 - Omniview Multitasker - RESTORE
  2709.     AX = 5404h
  2710.     ES:DX = process swapping in
  2711. Note:    called by OmniView to notify programs loaded before OmniView of state
  2712.       changes inside OmniView
  2713. SeeAlso: AX=5403h
  2714. ----------155405-----------------------------
  2715. INT 15 - Omniview Multitasker - SWITCHING TO BACKGROUND
  2716.     AX = 5405h
  2717.     ES:DX = process swapping in
  2718. Note:    called by OmniView to notify programs loaded before OmniView of state
  2719.       changes inside OmniView
  2720. SeeAlso: AX=5406h
  2721. ----------155406-----------------------------
  2722. INT 15 - Omniview Multitasker - SWITCHING TO FOREGROUND
  2723.     AX = 5406h
  2724.     ES:DX = process swapping in
  2725. Note:    called by OmniView to notify programs loaded before OmniView of state
  2726.       changes inside OmniView
  2727. SeeAlso: AX=5405h
  2728. ----------155407-----------------------------
  2729. INT 15 - Omniview Multitasker - EXIT NOTIFICATION
  2730.     AX = 5407h
  2731. Note:    called by OmniView to notify programs loaded before OmniView of state
  2732.       changes inside OmniView
  2733. SeeAlso: AX=5400h
  2734. ----------1580-------------------------------
  2735. INT 15 - OS HOOK - DEVICE OPEN (AT,XT286,PS)
  2736.     AH = 80h
  2737.     BX = device ID
  2738.     CX = process ID
  2739.     CF clear
  2740. Return: CF clear if successful
  2741.         AH = 00h
  2742.     CF set on error
  2743.         AH = status
  2744.         80h invalid command (PC,PCjr)
  2745.         86h function not supported (XT)
  2746. Note:    this function should be hooked by a multitasker which wishes to keep
  2747.       track of device ownership; the default BIOS handler merely returns
  2748.       successfully
  2749. SeeAlso: AH=81h,AH=82h
  2750. ----------1581-------------------------------
  2751. INT 15 - OS HOOK - DEVICE CLOSE
  2752.     AH = 81h
  2753.     BX = device ID
  2754.     CX = process ID
  2755.     CF clear
  2756. Return: CF clear if successful
  2757.         AH = 00h
  2758.     CF set on error
  2759.         AH = status (see AH=80h)
  2760. Note:    this function should be hooked by a multitasker which wishes to keep
  2761.       track of device ownership; the default BIOS handler merely returns
  2762.       successfully
  2763. SeeAlso: AH=80h,AH=82h
  2764. ----------1582-------------------------------
  2765. INT 15 - OS HOOK - PROGRAM TERMINATION
  2766.     AH = 82h
  2767.     BX = process ID
  2768.     CF clear
  2769. Return: CF clear if successful
  2770.         AH = 00h
  2771.     CF set on error
  2772.         AH = status (see AH=80h)
  2773. Notes:    closes all devices opened by the given process ID with function 80h
  2774.     this function should be hooked by a multitasker which wishes to keep
  2775.       track of device ownership; the default BIOS handler merely returns
  2776.       successfully
  2777. SeeAlso: AH=80h,AH=81h
  2778. ----------1583-------------------------------
  2779. INT 15 - BIOS - SET EVENT WAIT INTERVAL (AT,PS50+)
  2780.     AH = 83h
  2781.     AL = subfunction
  2782.         00h set interval
  2783.         CX:DX = microseconds to delay
  2784.         ES:BX -> byte whose high bit is to be set at end of interval
  2785.         01h cancel wait interval
  2786. Return: CF set on error or function already busy
  2787.         AH = status
  2788.         80h invalid command (PC,PCjr)
  2789.         86h function not supported (XT and later)
  2790.     CF clear if successful
  2791. Note:    the resolution of the wait period is 977 microseconds on most systems
  2792.       because most BIOSes use the 1/1024 second fast interrupt from the AT
  2793.       real-time clock chip which is available on INT 70
  2794. SeeAlso: AH=86h,INT 70
  2795. ----------1584-------------------------------
  2796. INT 15 - BIOS - JOYSTICK SUPPORT (XT after 11/8/82,AT,XT286,PS)
  2797.     AH = 84h
  2798.     DX = subfunction
  2799.         0000h read joystick switches
  2800.         Return: AL bits 7-4 = switch settings
  2801.         0001h read positions of joysticks
  2802.         Return: AX = X position of joystick A
  2803.             BX = Y position of joystick A
  2804.             CX = X position of joystick B
  2805.             DX = Y position of joystick B
  2806. Return: CF set on error
  2807.         AH = status
  2808.         80h invalid command (PC,PCjr)
  2809.         86h function not supported (other)
  2810.     CF clear if successful
  2811. Notes:    if no game port is installed, subfunction 0000h returns AL=00h (all
  2812.       switches open) and subfunction 0001h returns AX=BX=CX=DX=0000h
  2813.     a 250kOhm joystick typically returns 0000h-01A0h
  2814. ----------1585-------------------------------
  2815. INT 15 - OS HOOK - SysRq KEY ACTIVITY (AT,PS)
  2816.     AH = 85h
  2817.     AL = 00h SysRq key pressed
  2818.        = 01h SysRq key released
  2819.     CF clear
  2820. Return: CF clear if successful
  2821.         AH = 00h
  2822.     CF set on error
  2823.         AH = status (see AH=84h)
  2824. Notes:    called by keyboard decode routine
  2825.     the default handler simply returns successfully; programs which wish
  2826.       to monitor the SysRq key must hook this call
  2827. SeeAlso: INT 09
  2828. ----------1586-------------------------------
  2829. INT 15 - BIOS - WAIT (AT,PS)
  2830.     AH = 86h
  2831.     CX:DX = interval in microseconds
  2832. Return: CF clear if successful (wait interval elapsed)
  2833.     CF set on error or AH=83h wait already in progress
  2834.         AH = status (see AH=84h)
  2835. Note:    the resolution of the wait period is 977 microseconds on most systems
  2836.       because most BIOSes use the 1/1024 second fast interrupt from the AT
  2837.       real-time clock chip which is available on INT 70
  2838. SeeAlso: AH=83h,INT 70
  2839. ----------1587-------------------------------
  2840. INT 15 - SYSTEM - COPY EXTENDED MEMORY
  2841.     AH = 87h
  2842.     CX = number of words to copy (max 8000h)
  2843.     ES:SI -> global descriptor table
  2844. Return: CF set on error
  2845.     CF clear if successful
  2846.     AH = status
  2847.         00h source copied into destination
  2848.         01h parity error
  2849.         02h interrupt error
  2850.         03h address line 20 gating failed
  2851.         80h invalid command (PC,PCjr)
  2852.         86h unsupported function (XT,PS30)
  2853. Notes:    copy is done in protected mode with interrupts disabled
  2854.     this function is incompatible with the OS/2 compatibility box
  2855. SeeAlso: AH=88h,AH=89h
  2856.  
  2857. Format of global descriptor table:
  2858. Offset    Size    Description
  2859.  00h 16 BYTEs    zeros
  2860.  10h    WORD    source segment length in bytes (2*CX-1 or greater)
  2861.  12h  3 BYTEs    24-bit linear source address, low byte first
  2862.  15h    BYTE    source segment access rights (93h)
  2863.  16h    WORD    zero
  2864.  18h    WORD    destination segment length in bytes (2*CX-1 or greater)
  2865.  1Ah  3 BYTEs    24-bit linear destination address, low byte first
  2866.  1Dh    BYTE    destination segment access rights (93h)
  2867.  1Eh 18 BYTEs    zeros
  2868. ----------1588-------------------------------
  2869. INT 15 - SYSTEM - GET EXTENDED MEMORY SIZE (286+)
  2870.     AH = 88h
  2871. Return: CF clear if successful
  2872.         AX = number of contiguous KB starting at absolute address 100000h
  2873.     CF set on error
  2874.         AH = status
  2875.         80h invalid command (PC,PCjr)
  2876.         86h unsupported function (XT,PS30)
  2877. Note:    TSRs which wish to allocate extended memory to themselves often hook
  2878.       this call, and return a reduced memory size.    They are then free to
  2879.       use the memory between the new and old sizes at will.
  2880. SeeAlso: AH=87h
  2881. ----------1589-------------------------------
  2882. INT 15 - SYSTEM - SWITCH TO PROTECTED MODE
  2883.     AH = 89h
  2884.     BL = interrupt number of IRQ0 (IRQ1-7 use next 7 interrupts)
  2885.     BH = interrupt number of IRQ8 (IRQ9-F use next 7 interrupts)
  2886.     ES:SI -> GDT for protected mode
  2887.            offset 0h  null descriptor (initialize to zeros)
  2888.               8h  GDT descriptor
  2889.              10h  IDT descriptor
  2890.              18h  DS
  2891.              20h  ES
  2892.              28h  SS
  2893.              30h  CS
  2894.              38h  uninitialized, used to build descriptor for BIOS CS
  2895.     CX = offset into protected-mode CS to jump to
  2896. Return: CF set on error
  2897.        AH = FFh  error enabling address line 20
  2898.     CF clear if successful
  2899.        AH = 00h
  2900.        in protected mode at specified address
  2901. Note:    BL and BH must be multiples of 8
  2902. SeeAlso: AH=87h,AH=88h,INT 67/AX=DE0Ch
  2903. ----------1590-------------------------------
  2904. INT 15 - OS HOOK - DEVICE BUSY (AT,PS)
  2905.     AH = 90h
  2906.     AL = device type
  2907.         00h disk
  2908.         01h diskette
  2909.         02h keyboard
  2910.         03h PS/2 pointing device
  2911.         21h waiting for keyboard input (Phoenix BIOS)
  2912.         80h network
  2913.         FCh disk reset (PS)
  2914.         FDh diskette motor start
  2915.         FEh printer
  2916.     ES:BX -> request block for type codes 80h through BFh
  2917.     CF clear
  2918. Return: CF set if wait time satisfied
  2919.     CF clear if driver must perform wait
  2920.         AH = 00h
  2921. Notes:    type codes are allocated as follows:
  2922.       00-7F non-reentrant devices; OS must arbitrate access
  2923.       80-BF reentrant devices; ES:BX points to a unique control block
  2924.       C0-FF wait-only calls, no complementary INT 15/AH=91h call
  2925.     this function should be hooked by a multitasker to allow other tasks
  2926.       to execute while the BIOS is waiting for I/O completion; the default
  2927.       handler merely returns with AH=00h and CF clear
  2928. SeeAlso: AH=91h
  2929. ----------1591-------------------------------
  2930. INT 15 - OS HOOK - DEVICE POST (AT,PS)
  2931.     AH = 91h
  2932.     AL = device type (see AH=90h)
  2933.     ES:BX -> request block for type codes 80h through BFh
  2934.     CF clear
  2935. Return: AH = 00h
  2936. Note:    this function should be hooked by a multitasker to allow other tasks
  2937.       to execute while the BIOS is waiting for I/O completion; the default
  2938.       handler merely returns with AH=00h and CF clear
  2939. SeeAlso: AH=90h
  2940. ----------15BC-------------------------------
  2941. INT 15 - Phoenix 386 BIOS - DETERMINE CPU SPEED
  2942.     AH = BCh
  2943. Return: CF clear
  2944.     BYTE 0040h:00B0h set to ??? (43 on my 386/33)
  2945. Note:    reads system timer channel 0 twice, then does calculations on returned
  2946.       values
  2947. ----------15BF02DX0000-----------------------
  2948. INT 15 - Rational Systems DOS/16M - INSTALLATION CHECK
  2949.     AX = BF02h
  2950.     DX = 0000h
  2951. Return: DX = nonzero if installed
  2952.         DX:SI -> XBRK structure
  2953. SeeAlso: INT 2F/AH=A1h,INT 2F/AX=F100h,INT 2F/AX=FBA1h
  2954. ----------15C0-------------------------------
  2955. INT 15 - SYSTEM - GET CONFIGURATION (XT after 1/10/86,AT mdl 3x9,CONV,XT286,PS)
  2956.     AH = C0h
  2957. Return: CF set if BIOS doesn't support call
  2958.     CF clear on success
  2959.         ES:BX -> ROM table (see below)
  2960.     AH = status
  2961.         00h successful
  2962.         86h unsupported function
  2963. Notes:    the 1/10/86 XT BIOS returns an incorrect value for the feature byte
  2964.     the configuration table is at F000h:E6F5h in 100% compatible BIOSes
  2965.  
  2966. Format of ROM configuration table:
  2967. Offset    Size    Description
  2968.  00h    WORD    number of bytes following
  2969.  02h    BYTE    model (see below)
  2970.  03h    BYTE    submodel (see below)
  2971.  04h    BYTE    BIOS revision: 0 for first release, 1 for 2nd, etc.
  2972.  05h    BYTE    features:
  2973.         bit 7 = DMA channel 3 used by hard disk BIOS
  2974.         bit 6 = 2nd 8259 installed
  2975.         bit 5 = Real-Time Clock installed
  2976.         bit 4 = INT 15h/AH=4Fh called upon INT 9h
  2977.         bit 3 = wait for external event supported
  2978.         bit 2 = extended BIOS area allocated (usually at top of RAM)
  2979.         bit 1 = bus is Micro Channel instead of ISA
  2980.         bit 0 reserved
  2981.  06h    WORD    reserved (0)
  2982.  08h    WORD    reserved (0)
  2983.  0Ah        AWARD copyright notice here
  2984.  
  2985. Values for model/submodel/revision:
  2986. Model  Submdl  Rev    BIOS date    System
  2987.  FFh    *    *    04/24/81    PC (original)
  2988.  FFh    *    *    10/19/81    PC (some bugfixes)
  2989.  FFh    *    *    10/27/82    PC (HD, 640K, EGA support)
  2990.  FFh    46h    ***      ???        Olivetti M15
  2991.  FEh    *    *    08/16/82    PC XT
  2992.  FEh    *    *    11/08/82    PC XT and Portable
  2993.  FEh    43h    ***      ???        Olivetti M240
  2994.  FDh    *    *    06/01/83    PCjr
  2995.  FCh    *    *    01/10/84    AT models 068,099 6 MHz 20MB
  2996.  FCh    00h    01h    06/10/85    AT model  239      6 MHz 30MB
  2997.  FCh    00h    <> 01h      ???        7531/2 Industrial AT
  2998.  FCh    01h    00h    11/15/85    AT models 319,339 8 MHz, Enh Keyb, 3.5"
  2999.  FCh    01h    00h    01/15&88    Toshiba T5200/100
  3000.  FCh    01h    00h    12/26*89    Toshiba T1200/XE
  3001.             (Those date characters are not typos)
  3002.  FCh    01h    ???      ???        Compaq 286/386
  3003.  FCh    02h    00h    04/21/86    PC XT-286
  3004.  FCh    04h    00h    02/13/87     ** PS/2 Model 50
  3005.  FCh    04h    03h    04/18/88    PS/2 Model 50Z
  3006.  FCh    05h    00h    02/13/87     ** PS/2 Model 60
  3007.  FCh    06h    ???      ???        7552 "Gearbox"
  3008.  FCh    09h    02h    06/28/89    PS/2 Model 30-286
  3009.  FCh    0Bh    00h    02/16/90    PS/1
  3010.  FCh    42h    ***      ???        Olivetti M280
  3011.  FCh    45h    ***      ???        Olivetti M380 (XP 1, XP3, XP 5)
  3012.  FCh    48h    ***      ???        Olivetti M290
  3013.  FCh    4Fh    ***      ???        Olivetti M250
  3014.  FCh    50h    ***      ???        Olivetti M380 (XP 7)
  3015.  FCh    51h    ***      ???        Olivetti PCS286
  3016.  FCh    52h    ***      ???        Olivetti M300
  3017.  FCh    81h    00h    01/15/88    Phoenix 386 BIOS v1.10 10a
  3018.  FBh    00h    01h    01/10/86    PC XT, Enh Keyb, 3.5" support
  3019.  FBh    00h    02h    05/09/86    PC XT
  3020.  FBh    4Ch    ***      ???        Olivetti M200
  3021.  FAh    00h    00h    09/02/86    PS/2 Model 30
  3022.  FAh    00h    01h    12/12/86    PS/2 Model 30
  3023.  FAh    01h    00h      ???        PS/2 Model 25
  3024.  FAh    4Eh    ***      ???        Olivetti M111
  3025.  F9h    00h    00h    09/13/85    PC Convertible
  3026.  F8h    00h    00h    03/30/87     ** PS/2 Model 80 16MHz
  3027.  F8h    01h    00h    10/07/87    PS/2 Model 80 20MHz
  3028.  F8h    04h    02h    04/11/88    PS/2 Model 70 20MHz, type 2 system brd
  3029.  F8h    04h    03h    03/17/89    PS/2 Model 70 20MHz, type 2 system brd
  3030.  F8h    09h    ???      ???        PS/2 Model 70 16MHz, type 1 system brd
  3031.  F8h    09h    02h    04/11/88    PS/2 Model 70 some models
  3032.  F8h    09h    03h    03/17/89    PS/2 Model 70 some models
  3033.  F8h    0Bh    00h    01/18/89    PS/2 Model P70 (8573-121) typ 2 sys brd
  3034.  F8h    0Bh    02h    12/16/89    PS/2 Model P70 ??
  3035.  F8h    0Ch    00h    11/02/88    PS/2 Model 55SX
  3036.  F8h    0Dh    ???      ???        PS/2 Model 70 25MHz, type 3 system brd
  3037.  F8h    11h    00h    10/01/90    PS/2 Model ??
  3038.  F8h    13h    00h    10/01/90    PS/2 Model ??
  3039.  F8h    14h    00h    10/01/90    PS/2 Model 90-AK9
  3040.  F8h    16h    00h    10/01/90    PS/2 Model 90-AKD
  3041.  F8h    1Bh    00h    10/02/89    PS/2 Model 70-486
  3042.  F8h    1Ch    00h    02/08/90    PS/2 Model 65-121
  3043.  F8h    1Eh    00h    02/08/90    PS/2 Model ??
  3044.  F8h    50h    00h      ???        PS/2 Model P70 (8573) 16 MHz
  3045.  F8h    50h    01h    12/16/89    PS/2 Model P70 (8570-031)
  3046.  F8h    61h    ***      ???        Olivetti P500
  3047.  F8h    62h    ***      ???        Olivetti P800
  3048.  F8h    80h    01h    11/21/89    PS/2 Model 80-A21
  3049.  9Ah    *    *      ???        Compaq XT/Compaq Plus
  3050.  30h    ???    ???      ???        Sperry PC
  3051.  2Dh    *    *      ???        Compaq PC/Compaq Deskpro
  3052.  
  3053.     * This BIOS call is not implemented in these early versions.
  3054.       Read Model byte at F000h:FFFEh and BIOS date at F000h:FFF5h.
  3055.    ** These BIOS versions require the DASDDRVR.SYS patches.
  3056.   *** These Olivetti machines store the submodel in the byte at F000h:FFFDh.
  3057. ----------15C1-------------------------------
  3058. INT 15 - SYSTEM - RETURN EXTENDED-BIOS DATA-AREA SEGMENT ADDRESS (PS)
  3059.     AH = C1h
  3060. Return: CF set on error
  3061.     CF clear if successful
  3062.         ES = segment of data area
  3063. SeeAlso: AH=04h"ABIOS"
  3064. ----------15C200BH00-------------------------
  3065. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - ENABLE/DISABLE
  3066.     AX = C200h
  3067.     BH = 00h disable
  3068.          01h enable
  3069. Return: CF set on error
  3070.     AH = status
  3071.         00h successful
  3072.         01h invalid function
  3073.         02h invalid input
  3074.         03h interface error
  3075.         04h need to resend
  3076.         05h no device handler installed
  3077. ----------15C201-----------------------------
  3078. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - RESET
  3079.     AX = C201h
  3080. Return: CF set on error
  3081.         AH = status (see AX=C200h)
  3082.     CF clear if successful
  3083.         BH = device ID
  3084. SeeAlso: INT 33/AX=0000h
  3085. ----------15C202-----------------------------
  3086. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - SET SAMPLING RATE
  3087.     AX = C202h
  3088.     BH = sampling rate
  3089.         00h 10/second
  3090.         01h 20/second
  3091.         02h 40/second
  3092.         03h 60/second
  3093.         04h 80/second
  3094.         05h 100/second
  3095.         06h 200/second
  3096. Return: CF set on error
  3097.         AH = status (see AX=C200h)
  3098. SeeAlso: INT 33/AX=001Ch
  3099. ----------15C203-----------------------------
  3100. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - SET RESOLUTION
  3101.     AX = C203h
  3102.     BH = resolution
  3103.         00h one count per mm
  3104.         01h two counts per mm
  3105.         02h four counts per mm
  3106.         03h eight counts per mm
  3107. Return: CF set on error
  3108.         AH = status (see AX=C200h)
  3109. ----------15C204-----------------------------
  3110. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - GET TYPE
  3111.     AX = C204h
  3112. Return: CF set on error
  3113.         AH = status (see AX=C200h)
  3114.     CF clear if successful
  3115.         BH = device ID
  3116. ----------15C205-----------------------------
  3117. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - INITIALIZE
  3118.     AX = C205h
  3119.     BH = data package size (1 - 8 bytes)
  3120. Return: CF set on error
  3121.         AH = status (see AX=C200h)
  3122. SeeAlso: AX=C201h
  3123. ----------15C206-----------------------------
  3124. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - GET/SET SCALING FACTOR
  3125.     AX = C206h
  3126.     BH = subfunction
  3127.         00h return device status
  3128.         Return: BL = status
  3129.                bit 0: right button pressed
  3130.                bit 1: reserved
  3131.                bit 2: left button pressed
  3132.                bit 3: reserved
  3133.                bit 4: 0 if 1:1 scaling, 1 if 2:1 scaling
  3134.                bit 5: device enabled
  3135.                bit 6: 0 if stream mode, 1 if remote mode
  3136.                bit 7: reserved
  3137.             CL = resolution (see AX=C203h)
  3138.             DL = sample rate, reports per second
  3139.         01h set scaling at 1:1
  3140.         02h set scaling at 2:1
  3141. Return: CF set on error
  3142.         AH = status (see AX=C200h)
  3143. ----------15C207-----------------------------
  3144. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - SET DEVICE HANDLER ADDR
  3145.     AX = C207h
  3146.     ES:BX = user device handler
  3147. Return: CF set on error
  3148.         AH = status (see AX=C200h)
  3149. SeeAlso: INT 33/AX=000Ch
  3150. ----------15C3------------------------------
  3151. INT 15 - SYSTEM - ENABLE/DISABLE WATCHDOG TIMEOUT (PS50+)
  3152.     AH = C3h
  3153.     AL = 00h disable
  3154.          01h enable
  3155.         BX = timer counter
  3156. Return: CF set on error
  3157.     CF clear if successful
  3158. Note:    the watchdog timer generates an NMI
  3159. ----------15C4-------------------------------
  3160. INT 15 - SYSTEM - PROGRAMMABLE OPTION SELECT (PS50+)
  3161.     AH = C4h
  3162.     AL = 00h return base POS register address
  3163.          01h enable slot
  3164.          BL = slot number
  3165.          02h enable adapter
  3166. Return: CF set on error
  3167.     DX = base POS register address (if function 00h)
  3168. ----------15C5-------------------------------
  3169. INT 15 - OS HOOK (undoc) - ROM BIOS TRACING CALLOUT (PS30/286,PS50Z,PS95)
  3170.     AH = C5h
  3171.     AL = interrupt being invoked
  3172.         01h INT 19
  3173.         02h INT 14
  3174.         03h INT 16
  3175.         04h INT 40 (floppy INT 13)
  3176.         05h INT 17
  3177.         06h INT 10
  3178.         07h INT 12
  3179.         08h INT 11
  3180.         09h INT 1A
  3181. Return: all registers except AX must be preserved
  3182. Notes:    called as the very first action of the indicated ROM BIOS interrupt
  3183.       handlers on the PS/2 Models 30/286, 50Z, and 95
  3184.     default handler does nothing and returns CF clear for the above
  3185.       subfunctions, CF set and AH=86h for all other subfunctions
  3186.     value of AX passed to the original interrupt handler is pushed on
  3187.       stack immediately prior to call
  3188. ----------15C6-------------------------------
  3189. INT 15 - PS/2 Model 95 - ???
  3190.     AH = C6h
  3191.     ???
  3192. Return: ???
  3193. ----------15C7-------------------------------
  3194. INT 15 - PS/2 Model 95 - ???
  3195.     AH = C7h
  3196.     ???
  3197. Return: ???
  3198. ----------15C8-------------------------------
  3199. INT 15 - PS/2 Model 95 - ???
  3200.     AH = C8h
  3201.     ???
  3202. Return: ???
  3203. ----------15C9-------------------------------
  3204. INT 15 - PS/2 Model 95 - ???
  3205.     AH = C9h
  3206.     ???
  3207. Return: ???
  3208. ----------15CA-------------------------------
  3209. INT 15 - PS/2 Model 95 - ???
  3210.     AH = CAh
  3211.     ???
  3212. Return: ???
  3213. ----------15CB-------------------------------
  3214. INT 15 - PS/2 Model 95 - ???
  3215.     AH = CBh
  3216.     ???
  3217. Return: ???
  3218. ----------15CC-------------------------------
  3219. INT 15 - PS/2 Model 95 - ???
  3220.     AH = CCh
  3221.     ???
  3222. Return: ???
  3223. ----------15CD-------------------------------
  3224. INT 15 - PS/2 Model 95 - ???
  3225.     AH = CDh
  3226.     ???
  3227. Return: ???
  3228. ----------15CE-------------------------------
  3229. INT 15 - PS/2 Model 95 - ???
  3230.     AH = CEh
  3231.     ???
  3232. Return: ???
  3233. ----------15CF-------------------------------
  3234. INT 15 - PS/2 Model 95 - ???
  3235.     AH = CFh
  3236.     ???
  3237. Return: ???
  3238. ----------15D800-----------------------------
  3239. INT 15 - EISA SYSTEM ROM - READ SLOT CONFIGURATION INFORMATION
  3240.     AX = D800h
  3241.     CL = slot number (including embedded and virtual)
  3242. Return: CF clear if successful
  3243.         AH = 00h
  3244.     CF set on error
  3245.         AH = error code
  3246.         80h invalid slot number
  3247.         82h EISA CMOS corrupt
  3248.         83h empty slot
  3249.         86h invalid BIOS-FW function call
  3250.         87h invalid system configuration
  3251.     AL bit flags
  3252.         bit 7: set if duplicate IDs
  3253.         6: set if product ID readable
  3254.           4,5: slot type (00=expansion, 01=embedded, 10=virtual device)
  3255.           0-3: duplicate ID number if bit 7 set
  3256.     BH = major revision level of configuration utility
  3257.     BL = minor revision level of configuration utility
  3258.     CX = checksum of configuration file
  3259.     DH = number of device functions
  3260.     DL = combined function information byte
  3261.     SI:DI = 4-byte compressed ID (DI = bytes 0&1, SI = bytes 2&3)
  3262. Note:    call with AL=80h if using 32-bit CS addressing mode instead of 16-bit
  3263. SeeAlso: AX=D801h,AX=D804h
  3264. ----------15D801-----------------------------
  3265. INT 15 - EISA SYSTEM ROM - READ FUNCTION CONFIGURATION INFORMATION
  3266.     AX = D801h
  3267.     CH = function number to read
  3268.     CL = slot number (including embedded and virtual)
  3269.     DS:SI -> 320-byte buffer for standard configuration data block
  3270. Return: CF clear if successful
  3271.         AH = 00h
  3272.         DS:SI buffer filled
  3273.     CF set on error
  3274.         AH = error code
  3275.         80h invalid slot number
  3276.         81h invalid function number
  3277.         82h EISA CMOS corrupt
  3278.         83h empty slot
  3279.         86h invalid BIOS-FW function call
  3280.         87h invalid system configuration
  3281.     BX destroyed
  3282. Note:    call with AL=81h if using 32-bit CS addressing mode instead of 16-bit
  3283. ----------15D802-----------------------------
  3284. INT 15 - EISA SYSTEM ROM - CLEAR NONVOLATILE MEMORY (EISA CMOS)
  3285.     AX = D802h
  3286.     BH = EISA config utility major revision level
  3287.     BL = EISA config utility minor revision level
  3288. Return: CF clear if successful
  3289.         AH = 00h
  3290.     CF set on error
  3291.         AH = error code
  3292.         84h error clearing CMOS
  3293.         86h invalid BIOS-FW function call
  3294.         88h config utility version not supported
  3295. Note:    call with AL=82h if using 32-bit CS addressing mode instead of 16-bit
  3296. SeeAlso: AX=D803h
  3297. ----------15D803-----------------------------
  3298. INT 15 - EISA SYSTEM ROM - WRITE NONVOLATILE MEMORY
  3299.     AX = D803h
  3300.     CX = length of data structure (0000h = empty slot)
  3301.         includes two bytes for config file checksum
  3302.     DS:SI -> configuration data
  3303. Return: CF clear if successful
  3304.         AH = 00h
  3305.     CF set on error
  3306.         AH = error code
  3307.         84h error clearing CMOS
  3308.         85h EISA CMOS is full
  3309.         86h invalid BIOS-FW function call
  3310. Note:    call with AL=83h if using 32-bit CS addressing mode instead of 16-bit
  3311. SeeAlso: AX=D802h
  3312. ----------15D804-----------------------------
  3313. INT 15 - EISA SYSTEM ROM - READ PHYSICAL SLOT
  3314.     AX = D804h
  3315.     CL = slot number (including embedded and virtual)
  3316. Return: CF clear if successful
  3317.         AH = 00h
  3318.     CF set on error
  3319.         AH = error code
  3320.         80h invalid slot number
  3321.         83h empty slot
  3322.         86h invalid BIOS-FW function call
  3323.     SI:DI = 4-byte compressed ID (DI = bytes 0&1, SI = bytes 2&3)
  3324. Note:    call with AL=84h if using 32-bit CS addressing mode instead of 16-bit
  3325. SeeAlso: AX=D800h
  3326. ----------15D8-------------------------------
  3327. INT 15 - EISA SYSTEM ROM - 32-bit CS ADDRESSING MODE CALLS
  3328.     AH = D8h
  3329.     AL = 80h to 84h
  3330.     other registers as appropriate for AL=00h to 04h
  3331. Return: as appropriate for AL=00h to 04h
  3332. Note:    these functions are identical to AX=D800h to D804h, except that they
  3333.       should be called when using 32-bit CS addressing mode (pointers use
  3334.       ESI rather than SI as offset) instead of 16-bit addressing mode
  3335. SeeAlso: AX=D800h,AX=D801h,AX=D802h,AX=D803h,AX=D804h
  3336. ----------15DE00-----------------------------
  3337. INT 15 - DESQview - GET PROGRAM NAME
  3338.     AX = DE00h
  3339. Return: AX = offset into DESQVIEW.DVO of current program's record (see below)
  3340. SeeAlso: AX=DE07h
  3341.  
  3342. Format of program entry in DESQVIEW.DVO:
  3343. Offset    Size    Description
  3344.  00h    BYTE    length of name
  3345.  01h  N BYTEs    name
  3346.       2 BYTEs    keys to invoke program (second = 00h if only one key used)
  3347.     WORD    ??? seems always to be 0000h
  3348.     BYTE    end flag: 00h for all but last entry, which is FFh
  3349. ----------15DE01-----------------------------
  3350. INT 15 - DESQview - UPDATE "OPEN WINDOW" MENU
  3351.     AX = DE01h
  3352. Return: nothing
  3353. Note:    reads DESQVIEW.DVO, disables Open menu if file not in current directory
  3354. ----------15DE02-----------------------------
  3355. INT 15 - DESQview 1.x only - SET ??? FLAG FOR CURRENT WINDOW
  3356.     AX = DE02h
  3357. Return: nothing
  3358. Note:    this call is a NOP in DV 2.x
  3359. SeeAlso: AX=DE03h
  3360. ----------15DE03-----------------------------
  3361. INT 15 - DESQview 1.x only - GET ??? FOR CURRENT WINDOW
  3362.     AX = DE03h
  3363. Return: AX = ??? for current window
  3364.     BX = ??? for current window
  3365. Note:    this call is a NOP in DV 2.x
  3366. SeeAlso: AX=DE02h
  3367. ----------15DE04-----------------------------
  3368. INT 15 - DESQview - GET AVAILABLE COMMON MEMORY
  3369.     AX = DE04h
  3370. Return: BX = bytes of common memory available
  3371.     CX = largest block available
  3372.     DX = total common memory in bytes
  3373. SeeAlso: AX=DE05h,AX=DE06h
  3374. ----------15DE05-----------------------------
  3375. INT 15 - DESQview - GET AVAILABLE CONVENTIONAL MEMORY
  3376.     AX = DE05h
  3377. Return: BX = K of memory available
  3378.     CX = largest block available
  3379.     DX = total conventional memory in K
  3380. SeeAlso: AX=DE04h,AX=DE06h
  3381. ----------15DE06-----------------------------
  3382. INT 15 - DESQview - GET AVAILABLE EXPANDED MEMORY
  3383.     AX = DE06h
  3384. Return: BX = K of expanded memory available
  3385.     CX = largest block available
  3386.     DX = total expanded memory in K
  3387. SeeAlso: AX=DE04h,AX=DE05h
  3388. ----------15DE07-----------------------------
  3389. INT 15 - DESQview - "APPNUM" - GET CURRENT PROGRAM'S NUMBER
  3390.     AX = DE07h
  3391. Return: AX = number of program as it appears on the "Switch Windows" menu
  3392. Note:    this API call may be made from a hardware interrupt handler
  3393. SeeAlso: AX=DE00h
  3394. ----------15DE08-----------------------------
  3395. INT 15 - DESQview - GET ???
  3396.     AX = DE08h
  3397. Return: AX = 0000h if ??? is not set to the current task
  3398.          0001h if ??? is set to the current task
  3399. ----------15DE09-----------------------------
  3400. INT 15 - DESQview - UNIMPLEMENTED
  3401.     AX = DE09h
  3402. Return: nothing (NOP in DV 1.x and 2.x)
  3403. ----------15DE0A-----------------------------
  3404. INT 15 - DESQview 2.x - "DBGPOKE" - DISPLAY CHARACTER ON STATUS LINE
  3405.     AX = DE0Ah
  3406.     BL = character
  3407. Return: character displayed, next call will display in next position (which
  3408.     wraps back to the start of the line if off the right edge of screen)
  3409. Notes:    displays character on bottom line of *physical* screen, regardless
  3410.       of current size of window (even entirely hidden)
  3411.     does not know about graphics display modes, just pokes the characters
  3412.       into display memory
  3413.     this API call may be made from a hardware interrupt handler
  3414. SeeAlso: AX=1003h
  3415. ----------15DE0B-----------------------------
  3416. INT 15 - DESQview 2.x - "APILEVEL" - DEFINE MINIMUM API LEVEL REQUIRED
  3417.     AX = DE0Bh
  3418.     BL = API level major version number
  3419.     BH = API level minor version number
  3420. Return: AX = maximum API level (AL = major, AH = minor)
  3421. Notes:    if the requested API level is greater than the version of DESQview, a
  3422.       "You need a newer version" error window is popped up
  3423.     the API level defaults to 1.00, and is inherited by child tasks
  3424.     some early copies of DV 2.00 return AX=0200h instead of 0002h
  3425. ----------15DE0C-----------------------------
  3426. INT 15 - DESQview 2.x - "GETMEM" - ALLOCATE "SYSTEM" MEMORY
  3427.     AX = DE0Ch
  3428.     BX = number of bytes
  3429. Return: ES:DI -> allocated block or 0000h:0000h (DV 2.26+)
  3430. Note:    use SETERROR (AX=DE15h) to avoid a user prompt if there is insufficient
  3431.       system memory
  3432. SeeAlso: AX=1001h,AX=DE0Dh,AX=DE15h
  3433. ----------15DE0D-----------------------------
  3434. INT 15 - DESQview 2.x - "PUTMEM" - DEALLOCATE "SYSTEM" MEMORY
  3435.     AX = DE0Dh
  3436.     ES:DI -> previously allocated block
  3437. Return: nothing
  3438. SeeAlso: AX=1002h,AX=DE0Ch
  3439. ----------15DE0E-----------------------------
  3440. INT 15 - DESQview 2.x - "FINDMAIL" - FIND MAILBOX BY NAME
  3441.     AX = DE0Eh
  3442.     ES:DI -> name to find
  3443.     CX = length of name
  3444. Return: BX = 0000h not found
  3445.          0001h found
  3446.         DS:SI = object handle
  3447. SeeAlso: AH=12h/BH=11h
  3448. ----------15DE0F-----------------------------
  3449. INT 15 - DESQview 2.x - ENABLE DESQview EXTENSIONS
  3450.     AX = DE0Fh
  3451. Return: AX and BX destroyed (seems to be bug, weren't saved&restored)
  3452. Notes:    sends a manager stream with opcodes AEh, BDh, and BFh to task's window
  3453.     enables an additional mouse mode
  3454. ----------15DE10-----------------------------
  3455. INT 15 - DESQview 2.x - "PUSHKEY" - PUT KEY INTO KEYBOARD INPUT STREAM
  3456.     AX = DE10h
  3457.     BH = scan code
  3458.     BL = character
  3459. Return: nothing
  3460. Notes:    a later read will get the keystroke as if it had been typed by the user
  3461.     multiple pushes are read last-in first-out
  3462.     if a script exists for the pushed key in the current application, the
  3463.       script will be executed
  3464.     early copies of DV 2.00 destroy AX, BX, ES, and DI
  3465. SeeAlso: INT 16/AH=05h
  3466. ----------15DE11BL00-------------------------
  3467. INT 15 - DESQview 2.x - ENABLE/DISABLE AUTOMATIC JUSTIFICATION OF WINDOW
  3468.     AX = DE11h
  3469.     BL = 00h      viewport will not move automatically
  3470.          nonzero  viewport will move to keep cursor visible (default)
  3471. Return: nothing
  3472. ----------15DE12BX0000-----------------------
  3473. INT 15 - DESQview 2.01+ - "CSTYLE" - SET "C"-COMPATIBLE CONTROL CHAR INTERPRET
  3474.     AX = DE12h
  3475.     BX = 0000h    select normal style (linefeed only moved down)
  3476.          nonzero  select C style (linefeed moves to start of next line)
  3477. Return: nothing
  3478. Note:    set on a per-task basis, and inherited from the parent task
  3479. ----------15DE13-----------------------------
  3480. INT 15 - DESQview 2.2+ - GET CRITICAL NESTING COUNT
  3481.     AX = DE13h
  3482. Return: BX = number of calls to BEGINC or ENTERC (see INT 15/AX=101Bh,DE1Ch)
  3483.          without matching ENDC (see INT 15/AX=101Ch)
  3484. Note:    this API call may be made from within a hardware interrupt handler
  3485. SeeAlso: AX=101Bh,AX=101Ch,AX=DE1Bh,AX=DE1Ch
  3486. ----------15DE14-----------------------------
  3487. INT 15 - DESQview 2.2+ - GET OBJECT TYPE
  3488.     AX = DE14h
  3489.     ES:DI -> object
  3490. Return: BL = 00h not an object
  3491.          08h window or task
  3492.          09h mailbox
  3493.          0Ah keyboard
  3494.          0Bh timer
  3495.          0Ch objectq
  3496.          0Fh pointer
  3497.          10h panel
  3498. SeeAlso: AX=1016h
  3499. ----------15DE15BL00-------------------------
  3500. INT 15 - DESQview 2.2+ - SET ERROR HANDLING
  3501.     AX = DE15h
  3502.     BL = 00h post system error on all error conditions
  3503.          01h return carry flag set on calls to ADDTO, SUBFROM, and WRITE
  3504.          messages sent to mailboxes which fail due to lack of system
  3505.          or common memory
  3506.          02h (v2.26+) same as 01h, but return null pointer for GETMEM
  3507.          calls which fail due to lack of system memory
  3508. Return: nothing
  3509. SeeAlso: AX=DE16h
  3510. ----------15DE16-----------------------------
  3511. INT 15 - DESQview 2.2+ - GET ERROR HANDLING
  3512.     AX = DE16h
  3513. Return: BL = 00h always post system error
  3514.          01h return carry flag set on failed mailbox writes
  3515.          02h return CF set on failed mailbox writes and NULL on failed
  3516.          GETMEM calls
  3517. SeeAlso: AX=DE15h
  3518. ----------15DE17-----------------------------
  3519. INT 15 - DESQview 2.20-2.25 - reserved
  3520.     AX = DE17h
  3521. Return: pops up "Programming error" window
  3522. Note:    AX = 1117h is NOT identical to this call under DESQview 2.20 thru 2.25
  3523. SeeAlso: AX=1117h
  3524. ----------15DE17BX0000-----------------------
  3525. INT 15 - DESQview 2.26+ - "ASSERTMAP" - GET/SET MAPPING CONTEXT
  3526.     AX = DE17h
  3527.     BX = 0000h    get current mapping context without setting
  3528.          nonzero    set new mapping context
  3529. Return: BX = mapping context in effect before call
  3530. Notes:    mapping contexts determine conventional-memory addressability; setting
  3531.       a mapping context ensures that the associated program and data areas
  3532.       are in memory for access.  Usable by drivers, TSRs and shared
  3533.       programs.
  3534.     caller need not be running under DESQview
  3535.     this API call may be made from a hardware interrupt handler
  3536. SeeAlso: AX=1117h,INT 2F/AX=1685h
  3537. ----------15DE18-----------------------------
  3538. INT 15 - DESQview 2.2+ internal -
  3539.     AX = DE18h
  3540.     BP = function number
  3541.         high byte must be 10h
  3542.         low byte is function
  3543.         00h set ???
  3544.             BL = ???  (00h-10h, video mode???)
  3545.             BH = value to store
  3546.         03h set ???
  3547.             BL = ??? (stored in driver)
  3548.         0Ah get ???
  3549.             ES:DI -> 18-byte buffer to hold ???
  3550. Note:    calls video driver (NOP for Hercules driver,probably CGA and MCGA also)
  3551. ----------15DE19-----------------------------
  3552. INT 15 - DESQview 2.23+ - "GETCOMMON" - ALLOCATE "COMMON" MEMORY
  3553.     AX = DE19h
  3554.     BX = number of bytes to allocate
  3555. Return: AX = 0000h successful
  3556.         ES:DI -> allocated block
  3557.          nonzero insufficient memory
  3558. Note:    this API call may be made from within a hardware interrupt handler
  3559. SeeAlso: AX=DE0Ch,AX=DE15h,AX=DE1Ah
  3560. ----------15DE1A-----------------------------
  3561. INT 15 - DESQview 2.23+ - "PUTCOMMON" - DEALLOCATE "COMMON" MEMORY
  3562.     AX = DE1Ah
  3563.     DS:SI -> previously allocated block
  3564. Note:    this function may be called from within a hardware interrupt handler
  3565. SeeAlso: AX=DE0Dh,AX=DE19h
  3566. ----------15DE1B-----------------------------
  3567. INT 15 - DESQview 2.23+ internal - DECREMENT CRITICAL NESTING COUNT
  3568.     AX = DE1Bh
  3569. Return: nothing
  3570. SeeAlso: AX=101Ch,AX=DE13h,AX=DE1Ch
  3571. ----------15DE1C-----------------------------
  3572. INT 15 - DESQview 2.23+ - "ENTERC" - INCREMENT CRITICAL NESTING COUNT
  3573.     AX = DE1Ch
  3574. Return: nothing
  3575. Notes:    similar to AX=101Bh, but begins the critical region without ensuring
  3576.       that DOS is free
  3577.     the official documentation states that this call should be paired with
  3578.       "ENDC" (AX=101Ch); no mention is made of AX=DE1Bh
  3579.     this API call may be made from within a hardware interrupt handler
  3580. SeeAlso: AX=101Bh,AX=101Ch,AX=DE13h,AX=DE1Bh
  3581. ----------15DE1D-----------------------------
  3582. INT 15 - DESQview 2.23+ - "PUTKEY" - FAKE USER KEYSTROKES
  3583.     AX = DE1Dh
  3584.     DX = segment of handle for task to receive keystroke
  3585.     BL = character
  3586.     BH = scan code
  3587. Return: AX = 0000h if successful
  3588.        nonzero if receiver's keyboard buffer was full
  3589. Notes:    the key is treated as though the user had pressed it, ignoring any
  3590.       script which may be bound to the key, and using the current field
  3591.       table if the keyboard object is in field processing mode
  3592.     multiple PUTKEYs are seen in the order in which they are executed
  3593. SeeAlso: AX=DE10h
  3594. ----------15DE1E-----------------------------
  3595. INT 15 - DESQview 2.23+ - "SCRNINFO" - GET TRUE VIDEO PARAMETERS
  3596.     AX = DE1Eh
  3597. Return:    CL = actual number of rows on screen
  3598.     CH = actual number of columns on screen
  3599.     BL = actual video mode (may differ from INT 10/AH=0Fh return) (v2.26+)
  3600. Note:    this API call may be made from a hardware interrupt handler
  3601. SeeAlso: INT 10/AH=0Fh
  3602. ----------15DE1F-----------------------------
  3603. INT 15 - DESQview 2.23+ - "DOSUSER" - GET HANDLE OF TASK CURRENTLY USING DOS
  3604.     AX = DE1Fh
  3605. Return: BX = segment of task handle or 0000h if no tasks are using DOS
  3606. Note:    this API call may be made from within a hardware interrupt handler
  3607. SeeAlso: AX=DE13h
  3608. ----------15DE20-----------------------------
  3609. INT 15 - DESQview 2.26+ - "DISPATCHINT" - INTERRUPT ANOTHER TASK
  3610.     AX = DE20h
  3611.     BX = segment of handle of task to interupt
  3612.     DX:CX -> FAR interrupt routine
  3613. Return: nothing
  3614. Notes:    unlike "PGMINT" (AX=1021h), DISPATCHINT may be applied to the task
  3615.       making the DISPATCHINT call
  3616.     multiple "DISPATCHINT" calls are processed in the order in which they
  3617.       were executed
  3618.     the FAR routine is entered with the current ES, DS, SI, DI, and BP
  3619.       values, using the task's internal stack (see AX=101Ah); only SS:SP
  3620.       needs to be preserved
  3621.     this API call may be made from within a hardware interrupt handler
  3622. SeeAlso: AX=1021h
  3623. ----------15DE21BX0000-----------------------
  3624. INT 15 - DESQview 2.26+ - "ASSERTVIR" - CONTROL 386 SCREEN VIRTUALIZATION
  3625.     AX = DE21h
  3626.     BX = 0000h turn off
  3627.          nonzero turn on
  3628. Return: BX = old state of virtualization
  3629. Note:    this API call may be made from within a hardware interrupt handler
  3630. ----------15DE22-----------------------------
  3631. INT 15 - DESQview 2.26+ - "PROCESSMEM" - GET TASK MEMORY STATUS
  3632.     AX = DE22h
  3633.     DX = segment of task handle
  3634. Return: DX = total amount of memory in paragraphs
  3635.     BX = amount of system memory in paragraphs
  3636.     CX = largest block of system memory available in paragraphs
  3637.     AX = flags
  3638.         bit 0: system memory resides in shared memory
  3639.         1: process's memory is swapped out
  3640.         2: process's system memory is swapped out
  3641. Notes:    if the task handle is a child task, the returned values will be for the
  3642.       process containing the task, rather than the task itself
  3643.     if the process's system memory is swapped out, BX,CX,DX remain
  3644.       unchanged, because the memory usage cannot be determined
  3645. SeeAlso: AX=DE04h,AX=DE05h,AX=DE06h
  3646. ----------15DE23-----------------------------
  3647. INT 15 - DESQview 2.31+ - ???
  3648.     AX = DE23h
  3649.     BX = ???
  3650.     CX = ???
  3651. Return: ???
  3652. ----------15E00F-----------------------------
  3653. INT 15 - Compaq Systempro - MULTIPROCESSOR DISPATCH
  3654.     AX = E00Fh
  3655.     ES:BX -> start of 2nd processor's execution
  3656. Return: AL = 0Fh successful
  3657.        = 00h failure    
  3658. SeeAlso: AX=E10Eh,AX=E200h
  3659. ----------15E10E-----------------------------
  3660. INT 15 - Compaq Systempro - MULTIPROCESSOR END-OF-DISPATCH
  3661.     AX = E10Eh
  3662.     ES:BX -> start of 2nd processor's execution
  3663. Return: AL = 0Fh successful (halted)
  3664.        = 00h failure (not halted)
  3665. SeeAlso: AX=E00Fh,AX=E200h
  3666. ----------15E200-----------------------------
  3667. INT 15 - Compaq Systempro - MULTIPROCESSOR AVAILABLE
  3668.     AX = E200h
  3669. Return: AX = 8000h if 2nd processor available
  3670. SeeAlso: AX=E00Fh,AX=E10Eh
  3671. ----------1600-------------------------------
  3672. INT 16 - KEYBOARD - GET KEYSTROKE
  3673.     AH = 00h
  3674. Return: AH = scan code
  3675.     AL = ASCII character
  3676. Note:    on extended keyboards, this function discards any extended keystrokes,
  3677.       returning only when a non-extended keystroke is available
  3678. SeeAlso: AH=01h,AH=05h,AH=10h
  3679. ----------1601-------------------------------
  3680. INT 16 - KEYBOARD - CHECK FOR KEYSTROKE
  3681.     AH = 01h
  3682. Return: ZF set if no keystroke available
  3683.     ZF clear if keystroke available
  3684.         AH = scan code
  3685.         AL = ASCII character
  3686. Note:    if a keystroke is present, it is not removed from the keyboard buffer;
  3687.       however, any extended keystrokes which are not compatible with 83/84-
  3688.       key keyboards are removed in the process of checking whether a
  3689.       non-extended keystroke is available
  3690. SeeAlso: AH=00h,AH=11h
  3691. ----------1602-------------------------------
  3692. INT 16 - KEYBOARD - GET SHIFT FLAGS
  3693.     AH = 02h
  3694. Return: AL = shift flags
  3695.         bit 7: Insert active
  3696.         6: CapsLock active
  3697.         5: NumLock active
  3698.         4: ScrollLock active
  3699.         3: Alt key pressed (either Alt on 101/102-key keyboards)
  3700.         2: Ctrl key pressed (either Ctrl on 101/102-key keyboards)
  3701.         1: left shift key pressed
  3702.         0: right shift key pressed
  3703. SeeAlso: AH=12h
  3704. ----------1603-------------------------------
  3705. INT 16 - KEYBOARD - SET TYPEMATIC RATE AND DELAY
  3706.     AH = 03h
  3707.     AL = subfunction
  3708.         00h (PCjr) set default delay and rate
  3709.         01h (PCjr) increase delay before repeat
  3710.         02h (PCjr) decrease repeat rate by factor of 2
  3711.         03h (PCjr) increase delay and decrease repeat rate
  3712.         04h (PCjr) turn off typematic repeat
  3713.         05h (AT,PS) set repeat rate and delay
  3714.         BH = delay value (00h = 250ms to 03h = 1000ms)
  3715.         BL = repeat rate (00h=30/sec to 0Ch=10/sec [def] to 1Fh=2/sec)
  3716. ----------1604-------------------------------
  3717. INT 16 - KEYBOARD - SET KEYCLICK (PCjr only)
  3718.     AH = 04h
  3719.     AL = keyclick state
  3720.         00h off
  3721.         01h on
  3722. SeeAlso: AH=03h
  3723. ----------1605-------------------------------
  3724. INT 16 - KEYBOARD - STORE KEYSTROKE IN KEYBOARD BUFFER (AT/PS w enh keybd only)
  3725.     AH = 05h
  3726.     CH = scan code
  3727.     CL = ASCII character
  3728. Return: AL = 00h if successful
  3729.          01h if keyboard buffer full
  3730. Note:    under DESQview, the following "keystrokes" invoke the following actions
  3731.       when they are read from the keyboard buffer:
  3732.         38FCh    pop up DESQview main menu
  3733.         38FEh    close the current window
  3734.         38FFh    pop up DESQview learn menu
  3735. SeeAlso: AH=00h,AH=71h,INT 15/AX=DE10h
  3736. ----------1610-------------------------------
  3737. INT 16 - KEYBOARD - GET ENHANCED KEYSTROKE (enhanced kbd support only)
  3738.     AH = 10h
  3739. Return: AH = scan code
  3740.     AL = ASCII character
  3741. Notes:    if no keystroke is available, this function waits until one is placed
  3742.       in the keyboard buffer
  3743.     unlike AH=00h, this function does not discard extended keystrokes
  3744. SeeAlso: AH=00h,AH=11h
  3745. ----------1611-------------------------------
  3746. INT 16 - KEYBOARD - CHECK FOR ENHANCED KEYSTROKE (enh kbd support only)
  3747.     AH = 11h
  3748. Return: ZF set if no keystroke available
  3749.     ZF clear if keystroke available
  3750.         AH = scan code
  3751.         AL = ASCII character
  3752. Notes:    if a keystroke is available, it is not removed from the keyboard buffer
  3753.     unlike AH=01h, this function does not discard extended keystrokes
  3754. SeeAlso: AH=01h,AH=10h
  3755. ----------1612-------------------------------
  3756. INT 16 - KEYBOARD - GET EXTENDED SHIFT STATES (enh kbd support only)
  3757.     AH = 12h
  3758. Return: AL = shift flags 1 (same as returned by AH=02h)
  3759.         bit 7: Insert active
  3760.         6: CapsLock active
  3761.         5: NumLock active
  3762.         4: ScrollLock active
  3763.         3: Alt key pressed (either Alt on 101/102-key keyboards)
  3764.         2: Ctrl key pressed (either Ctrl on 101/102-key keyboards)
  3765.         1: left shift key pressed
  3766.         0: right shift key pressed
  3767.     AH = shift flags 2
  3768.         bit 7: SysRq key pressed
  3769.         6: CapsLock pressed
  3770.         5: NumLock pressed
  3771.         4: ScrollLock pressed
  3772.         3: right Alt key pressed
  3773.         2: right Ctrl key pressed
  3774.         1: left Alt key pressed
  3775.         0: left Ctrl key pressed
  3776. Notes:    AL bit 3 set only for left Alt key on many machines
  3777.     AH bits 7 through 4 always clear on a Compaq SLT/286
  3778. SeeAlso: AH=02h
  3779. ----------164500-----------------------------
  3780. INT 16 - Shamrock Software EMAIL - GET STATUS
  3781.     AX = 4500h
  3782.     DL = port number (01h = COM1)
  3783.     ES:BX -> 13-byte buffer for ASCIZ name
  3784. Return: AX = 4D00h if EMAIL installed on specified port
  3785.         ES:BX -> "" if no connection
  3786.               -> "*" if connection but caller has not identified name
  3787.           -> name otherwise
  3788.         CX = version (CH = major, CL = minor)
  3789.         DL = privilege level of user (00h = guest)
  3790.         DH = chosen language (00h German, 01h English)
  3791. SeeAlso: AX=4501h,AX=4502h
  3792. ----------164501-----------------------------
  3793. INT 16 - Shamrock Software EMAIL - GET ELAPSED ONLINE TIME AND MAXIMUM TIME
  3794.     AX = 4501h
  3795.     DL = port number (01h = COM1)
  3796. Return: AX = 4D00h if EMAIL installed on specified port
  3797.         BX = maximum connect time in clock ticks
  3798.         CX = maximum connect time for guests (without name) in clock ticks
  3799.         DX = elapsed connect time of current user in clock ticks
  3800. SeeAlso: AX=4500h    
  3801. ----------164502-----------------------------
  3802. INT 16 - Shamrock Software EMAIL - GET CURRENT COMMUNICATIONS PARAMETERS
  3803.     AX = 4502h
  3804.     DL = port number (01h = COM1)
  3805. Return: AX = 4D00h if EMAIL installed on specified port
  3806.         BL = current value of serial port's Line Control Register
  3807.         BH = flags
  3808.         bit 0: ISO code
  3809.             1: pause
  3810.             2: linefeed
  3811.             3: ANSI sequences
  3812.         CX = selected country code (33 = France, 49 = Germany, etc)
  3813.         DX = baudrate divisor (115200/DX = baudrate)
  3814. SeeAlso: AX=4500h
  3815. ----------164503-----------------------------
  3816. INT 16 - Shamrock Software EMAIL - SPECIFY COMMAND-WORD FOR USER FUNCTION
  3817.     AX = 4503h
  3818.     DL = port number (01h = COM1)
  3819.     DH = maximum execution time in clock ticks (00h = 5 seconds)
  3820.     ES:BX -> ASCIZ string with new user command-word
  3821. Return: AX = 4D00h if EMAIL installed on specified port
  3822. Notes:    a single user command (consisting of only uppercase letters and digits)
  3823.       may be defined, and remains valid until it is overwritten or the
  3824.       EMAIL program terminates; the user command must be activated by
  3825.       calling AX=4504h at least once.
  3826.     an existing command word may be redefined with this function
  3827. SeeAlso: AX=4504h,AX=4505h
  3828. ----------164504-----------------------------
  3829. INT 16 - Shamrock Software EMAIL - CHECK FOR USER FUNCTION COMMAND-WORD
  3830.     AX = 4504h
  3831.     DL = port number (01h = COM1)
  3832.     ES:BX -> 80-byte buffer for ASCIZ user input line
  3833. Return: AX = 4D00h if EMAIL installed on specified port
  3834.         DL = flags
  3835.             bit 0: user function supported (always set)
  3836.             1: user entered user-function command word
  3837.         if DL bit 1 set,
  3838.             ES:BX buffer contains line entered by user which begins with
  3839.             the defined command word and has been converted to all
  3840.             caps
  3841. Note:    caller must process the returned commandline and invoke AX=4505h
  3842.       within five seconds with the result of that processing
  3843. SeeAlso: AX=4503h,AX=4505h
  3844. ----------164505-----------------------------
  3845. INT 16 - Shamrock Software EMAIL - SEND RESULT OF USER FUNCTION
  3846.     AX = 4505h
  3847.     DL = port number (01h = COM1)
  3848.     DH = error flag
  3849.         bit 3: set on error
  3850.     ES:BX -> ASCIZ text to return to user, max 1024 bytes
  3851. Return: AH = 4Dh if EMAIL installed on specified port
  3852.     AL = status
  3853.         00h successful
  3854.         02h unable to perform function (timeout, prev call not complete)
  3855.         other error
  3856. Notes:    if the error flag in DH is set, the string is not sent and an error
  3857.       message is generated instead; if this function is not called within
  3858.       five seconds of AX=4504h, EMAIL automatically generates an error
  3859.       message
  3860.     the string is copied into an internal buffer, allowing this function's
  3861.       caller to continue immediately
  3862. SeeAlso: AX=4503h,AX=4504h,INT 17/AX=2400h
  3863. ----------164506-----------------------------
  3864. INT 16 - Shamrock Software EMAIL - MONITOR XMODEM DOWNLOAD
  3865.     AX = 4506h
  3866.     DL = port number (01h = COM1)
  3867.     ES:BX -> 13-byte buffer for ASCIZ filename
  3868. Return: AX = 4D00h if EMAIL installed on specified port
  3869.         DH = Xmodem status
  3870.             00h no XGET command given
  3871.         01h XGET in progress
  3872.         02h XGET completed successfully
  3873.         ES:BX buffer filled with last filename given to XGET command
  3874.             (without path)
  3875. Note:    DH=02h will only be returned once per XGET; subsequent calls will
  3876.       return DH=00h
  3877. SeeAlso: AX=4500h,INT 17/AX=2408h
  3878. ----------165500-----------------------------
  3879. INT 16 - Microsoft Word internal - MICROSOFT WORD COOPERATION WITH TSR
  3880.     AX = 5500h
  3881. Return: AX = 4D53h if keyboard TSR present
  3882. Notes:    during startup, Microsoft Word tries to communicate with any TSRs
  3883.       that are present through this call.
  3884.     If the return is not 4D53h, Word installs its own INT 9h and INT 16h
  3885.       handlers, otherwise it assumes that the TSR will handle the keyboard.
  3886. ----------166969BX6968-----------------------
  3887. INT 16 - PC Tools v5.1+ BACKTALK - UNHOOK
  3888.     AX = 6969h
  3889.     BX = 6968h
  3890. Return: resident code unhooked, but not removed from memory
  3891. ----------166969BX6969-----------------------
  3892. INT 16 - PC Tools v5.1+ BACKTALK - INSTALLATION CHECK
  3893.     AX = 6969h
  3894.     BX = 6969h
  3895.     DX = 0000h
  3896. Return: DX nonzero if installed
  3897.         BX = CS of resident code
  3898.         DX = PSP segment of resident code
  3899.         DS:SI -> ASCIZ identification string "CPoint Talk"
  3900. ----------166F-------------------------------
  3901. INT 16 - MS Windows - ???
  3902.     AH = 6Fh
  3903.     ???
  3904. Return: ???
  3905. ----------166F00BX0000-----------------------
  3906. INT 16 - MS Windows - ???
  3907.     AX = 6F00h
  3908.     BX = 0000h
  3909.     ???
  3910. Return: BX = 4850h if ???
  3911. Note:    called by recent MS Mouse drivers
  3912. ----------1670-------------------------------
  3913. INT 16 - FAKEY.COM - INSTALLATION CHECK
  3914.     AH = 70h
  3915. Return: AX = 1954h if installed
  3916. Note:    FAKEY is a keystroke faking utility by System Enhancement Associates
  3917. ----------1671-------------------------------
  3918. INT 16 - FAKEY.COM - PUSH KEYSTROKES
  3919.     AH = 71h
  3920.     CX = number of keystrokes
  3921.     DS:SI -> array of words containing keystrokes to be returned by AH=00h
  3922. Note:    FAKEY is a keystroke faking utility by System Enhancement Associates
  3923. SeeAlso: AH=05h,AH=72h
  3924. ----------1672-------------------------------
  3925. INT 16 - FAKEY.COM - CLEAR FAKED KEYSTROKES
  3926.     AH = 72h
  3927. Note:    FAKEY is a keystroke faking utility by System Enhancement Associates
  3928. SeeAlso: AH=71h
  3929. ----------1673-------------------------------
  3930. INT 16 - FAKEY.COM - PLAY TONES
  3931.     AH = 73h
  3932.     CX = number of tones to play
  3933.     DS:SI -> array of tones (see below)
  3934. Note:    FAKEY is a keystroke faking utility by System Enhancement Associates
  3935. SeeAlso: INT 15/AX=1019h
  3936.  
  3937. Format of tone array entries:
  3938. Offset    Size    Description
  3939.  00h    WORD    divisor for timer channel 2
  3940.  02h    WORD    duration in clock ticks
  3941. ----------1675-------------------------------
  3942. INT 16 - pcANYWHERE III - SET TICK COUNT FOR SCANNING
  3943.     AH = 75h
  3944.     AL = number of ticks between checks for new screen changes
  3945. ----------1676-------------------------------
  3946. INT 16 - pcANYWHERE III - SET ERROR CHECKING TYPE
  3947.     AH = 76h
  3948.     AL = error checking type
  3949.         00h none
  3950.         01h fast
  3951.         02h slow
  3952. ----------1677-------------------------------
  3953. INT 16 - pcANYWHERE III - LOG OFF
  3954.     AH = 77h
  3955.     AL = mode
  3956.         00h wait for another call
  3957.         01h leave in Memory Resident Mode
  3958.         02h leave in Automatic Mode
  3959.         FFh leave in current operating mode
  3960. ----------167761-----------------------------
  3961. INT 16 - WATCH.COM - INSTALLATION CHECK
  3962.     AX = 7761h ('wa')
  3963. Return: AX = 5741h ('WA') if installed
  3964. Note:    WATCH.COM is part of the "TSR" package by Kim Kokkonen
  3965. ----------167788BX7789-----------------------
  3966. INT 16 - PC Magazine PUSHDIR.COM - INSTALLATION CHECK
  3967.     AX = 7788h
  3968.     BX = 7789h
  3969. Return: AX = 7789h
  3970.     BX = 7788h
  3971.     DS:SI -> signature string
  3972. ----------1679-------------------------------
  3973. INT 16 - pcANYWHERE III - CHECK STATUS
  3974.     AH = 79h
  3975. Return: AX = status
  3976.         FFFFh if resident and active
  3977.         FFFEh if resident but not active
  3978.         FFFDh if in Memory Resident mode
  3979.         FFFCh if in Automatic mode
  3980.         other value if not resident
  3981. SeeAlso: AX=7B00h,INT 21/AX=2B44h
  3982. ----------167A-------------------------------
  3983. INT 16 - pcANYWHERE III - CANCEL SESSION
  3984.     AH = 7Ah
  3985. ----------167B00-----------------------------
  3986. INT 16 - pcANYWHERE III - SUSPEND
  3987.     AX = 7B00h
  3988. SeeAlso: AH=79h,AX=7B01h
  3989. ----------167B01-----------------------------
  3990. INT 16 - pcANYWHERE III - RESUME
  3991.     AX = 7B01h
  3992. SeeAlso: AH=79h,AX=7B00h
  3993. ----------167C-------------------------------
  3994. INT 16 - pcANYWHERE III - GET PORT CONFIGURATION
  3995.     AH = 7Ch
  3996. Return: AH = port number
  3997.     AL = baud rate
  3998.         00h = 50 baud
  3999.         01h = 75 baud
  4000.         02h = 110 baud
  4001.         03h = 134.5 baud
  4002.         04h = 150 baud
  4003.         05h = 300 baud
  4004.         06h = 600 baud
  4005.         07h = 1200 baud
  4006.         08h = 1800 baud
  4007.         09h = 2000 baud
  4008.         0Ah = 2400 baud
  4009.         0Bh = 4800 baud
  4010.         0Ch = 7200 baud
  4011.         0Dh = 9600 baud
  4012.         0Eh = 19200 baud
  4013. ----------167D-------------------------------
  4014. INT 16 - pcANYWHERE III - GET/SET TERMINAL PARAMETERS
  4015.     AH = 7Dh
  4016.     AL = subfunction
  4017.         00h set terminal parameters
  4018.         01h get terminal parameters
  4019.         02h get configuration header and terminal parameters
  4020.     DS:CX -> terminal parameter block
  4021. ----------167E-------------------------------
  4022. INT 16 - pcANYWHERE III - COMMUNICATIONS I/O THROUGH PORT
  4023.     AH = 7Eh
  4024.     AL = subfunction
  4025.         01h port input status
  4026.         Return AX = 0 if no characer ready,
  4027.                AX = 1 if character ready
  4028.         02h port input character
  4029.         Return AL = received character
  4030.         03h port output character in CX
  4031.         11h hang up phone
  4032. ----------167F-------------------------------
  4033. INT 16 - pcANYWHERE III - SET KEYBOARD/SCREEN MODE
  4034.     AH = 7Fh
  4035.     AL = subfunction
  4036.         00h enable remote keyboard only
  4037.         01h enable host keyboard only
  4038.         02h enable both keyboards
  4039.         08h display top 24 lines
  4040.         09h display bottom 24 lines
  4041.         10h Hayes modem
  4042.         11h other modem
  4043.         12h direct connect
  4044. ----------1680-------------------------------
  4045. INT 16 - MAKEY.COM - INSTALLATION CHECK
  4046.     AH = 80h
  4047. Return: AX = 1954h if installed
  4048. Note:    MAKEY is a utility by System Enhancement Associates
  4049. ----------16AA-------------------------------
  4050. INT 16 - PTxxx.COM - (xxx=CGA,EGA,VGA,HER...) CALL GATE FOR GRAPHICS
  4051.     AH = AAh
  4052.     Various registers set up by high level language.
  4053. Return: Graphics performed
  4054. Note:    PT stands for Paint Tools which is a graphics library for Turbo Pascal,
  4055.       Modula 2 and others from DataBiten in Sweden. The library is
  4056.       installed as a memory resident driver.
  4057. ----------16E0E0-----------------------------
  4058. INT 16 - TurboPower TSRs - ALTERNATE INSTALLATION CHECK
  4059.     AX = E0E0h
  4060. Return: AX = 1F1Fh if installed
  4061.         DWORD 0040h:00F0h -> last data block in TSR list (see AX=F0F0h)
  4062. Note:    the returned TSR list provides support for communication among TSRs
  4063.       built with TurboPower's Turbo Professional and Object Professional
  4064.       libraries for Turbo Pascal
  4065. SeeAlso: AX=F0F0h
  4066. ----------16F0-------------------------------
  4067. INT 16 - Compaq 386 - SET CPU SPEED
  4068.     AH = F0h
  4069.     AL = speed
  4070.         00h equivalent to 6 MHz 80286 (COMMON)
  4071.         01h equivalent to 8 MHz 80286 (FAST)
  4072.         02h full 16 MHz (HIGH)
  4073.         03h toggles between 8 MHz-equivalent and speed set by system board
  4074.         switch (AUTO or HIGH)
  4075.         08h full 16 MHz except 8 MHz-equivalent during floppy disk access
  4076.         09h specify speed directly
  4077.         CX = speed value, 1 (slowest) to 50 (full), 3 ~= 8088
  4078. SeeAlso: AH=F1h,AH=F3h
  4079. ----------16F0F0-----------------------------
  4080. INT 16 - TurboPower TSRs - INSTALLATION CHECK
  4081.     AX = F0F0h
  4082. Return: AX = 0F0Fh if installed
  4083.         ES:DI -> last data block in TSR list
  4084. Note:    the returned TSR list provides support for communication among TSRs
  4085.       built with TurboPower's Turbo Professional and Object Professional
  4086.       libraries for Turbo Pascal
  4087. SeeAlso: AX=E0E0h
  4088.  
  4089. Format of data block:
  4090. Offset    Size    Description
  4091.  00h    DWORD    pointer to program tag (counted ASCII string)
  4092.  04h    WORD    interface version number (0400h)
  4093.  06h    DWORD    pointer to command entry point
  4094.  0Ah    DWORD    pointer to previous data block (0000h:0000h if none)
  4095.  0Eh    DWORD    pointer to next data block (0000h:0000h if none)
  4096. ---swappable TSRs only---
  4097.  12h    DWORD    pointer to swapping data
  4098.  16h    DWORD    pointer to user data
  4099.     more???
  4100. ----------16F1-------------------------------
  4101. INT 16 - Compaq 386 - READ CURRENT CPU SPEED
  4102.     AH = F1h
  4103. Return:    AL = speed code (see AH=F0h)
  4104.          if AL = 09h, CX = speed code
  4105. SeeAlso: AH=F0h,AH=F3h
  4106. ----------16F2-------------------------------
  4107. INT 16 - Compaq 386 - DETERMINE ATTACHED KEYBOARD TYPE
  4108.     AH = F2h
  4109. Return: AL = type
  4110.         00h if 11-bit AT keyboard is in use
  4111.         01h if 9-bit PC keyboard is in use 
  4112. ----------16F3-------------------------------
  4113. INT 16 - Compaq 80286s - SET CPU SPEED LIMIT (OVERRIDE JUMPER)
  4114.     AH = F3h
  4115.     AL = 00h limit is 6 Mhz
  4116.        = 01h limit is 8 Mhz/6 Mhz
  4117. SeeAlso: AH=F0h,AH=F1h
  4118. ----------16F400-----------------------------
  4119. INT 16 - Compaq Systempro - CACHE CONTROLLER STATUS
  4120.     AX = F400h
  4121. Return: AH = E2h
  4122.     AL = status
  4123.         00h not present
  4124.         01h enabled
  4125.         02h disabled
  4126. SeeAlso: AX=F401h,AX=F402h
  4127. ----------16F401-----------------------------
  4128. INT 16 - Compaq Systempro - ENABLE CACHE CONTROLLER
  4129.     AX = F401h
  4130. Return: AX = E201h
  4131. SeeAlso: AX=F400h,AX=F402h
  4132. ----------16F402-----------------------------
  4133. INT 16 - Compaq Systempro - DISABLE CACHE CONTROLLER
  4134.     AX = F402h
  4135. Return: AX = E202h
  4136. SeeAlso: AX=F400h,AX=F401h
  4137. ----------16FFA5CX1111-----------------------
  4138. INT 16 - PC-Cache v6+ - INSTALLATION CHECK
  4139.     AX = FFA5h
  4140.     CX = 1111h
  4141. Return: CH = 00h if installed
  4142.         ES:DI -> internal data (see below)
  4143.         CL = cache state
  4144.             01h enabled
  4145.         02h disabled
  4146. SeeAlso: INT 13/AH=A0h,INT 21/AH=2Bh/CX=4358h
  4147.  
  4148. Format of internal data:
  4149. Offset    Size    Description
  4150. -1Ch 20 BYTEs    cached drive list, one byte per drive A: to T:
  4151.         each byte is either blank (20h) or drive letter (41h-54h)
  4152.  -8    BYTE    ???
  4153.  -7    WORD    number of physical transfers (scaled down to 0000h-7FFFh)
  4154.  -5    WORD    number of saved transfers (scaled down to 0000h-7FFFh)
  4155.  -3   3 BYTEs    ???
  4156. ----------16FFA5CXAAAA-----------------------
  4157. INT 16 - PC-Cache v6+ - ENABLE DELAYED WRITES
  4158.     AX = FFA5h
  4159.     CX = AAAAh
  4160. Return: AX = ??? (apparently either 0000h or sectors_in_cache - 5)
  4161. SeeAlso: AX=FFA5h/CX=CCCCh
  4162. ----------16FFA5CXCCCC-----------------------
  4163. INT 16 - PC-Cache v6+ - FLUSH CACHE AND DISABLE DELAYED WRITES
  4164.     AX = FFA5h
  4165.     CX = CCCCh
  4166. Return: AX = ??? (apparently either 0000h or sectors_in_cache - 5)
  4167. Note:    delayed writes are automatically disabled on EXECing
  4168.       (see INT 21/AH=4Bh) a program named either WIN.CO? or DV.E??;
  4169.       however, delayed writes are not automatically reenabled upon the
  4170.       program's termination in v6.
  4171. SeeAlso: AX=FFA5h/CX=AAAAh,AX=FFA5h/CX=FFFFh
  4172. ----------16FFA5CXDDDD-----------------------
  4173. INT 16 - PC-Cache v6+ - FLUSH AND DISABLE CACHE
  4174.     AX = FFA5h
  4175.     CX = DDDDh
  4176. SeeAlso: AX=FFA5h/CX=EEEEh,AX=FFA5h/CX=FFFFh
  4177. ----------16FFA5CXEEEE-----------------------
  4178. INT 16 - PC-Cache v6+ - ENABLE CACHE
  4179.     AX = FFA5h
  4180.     CX = EEEEh
  4181. SeeAlso: AX=FFA5h/CX=DDDDh
  4182. ----------16FFA5CXFFFF-----------------------
  4183. INT 16 - PC-Cache v6+ - FLUSH CACHE
  4184.     AX = FFA5h
  4185.     CX = FFFFh
  4186. SeeAlso: AX=FFA5h/CX=CCCCh,AX=FFA5h/CX=DDDDh,INT 13/AH=A1h
  4187. ----------16FFA6-----------------------------
  4188. INT 16 - PC Tools v6.0 DESKTOP API - GET ???
  4189.     AX = FFA6h
  4190. Return: DS:SI -> ???
  4191. ----------16FFA7-----------------------------
  4192. INT 16 - PC Tools v6.0 DESKTOP API - GET ??? PATH
  4193.     AX = FFA7h
  4194. Return: DS:SI -> ASCIZ path (directory from which PCTools was run???)
  4195. ----------16FFA8-----------------------------
  4196. INT 16 - PC Tools v6.0 DESKTOP API - ???
  4197.     AX = FFA8h
  4198.     DS:SI -> three consecutive ASCIZ strings for ??? (max 256 bytes total)
  4199.     ???
  4200. Return: ???
  4201. Notes:    available only when popped up
  4202.     strings copied into internal buffer, among other actions
  4203. ----------16FFA9-----------------------------
  4204. INT 16 - PC Tools v6.0 DESKTOP API - GET ???
  4205.     AX = FFA9h
  4206. Return: DS:SI -> version string???
  4207. ----------16FFAA-----------------------------
  4208. INT 16 - PC Tools v6.0 DESKTOP API - ???
  4209.     AX = FFAAh
  4210.     ???
  4211. Return: ???
  4212. Note:    available only when popped up
  4213. ----------16FFAB-----------------------------
  4214. INT 16 - PC Tools v6.0 DESKTOP API - GET EDITOR SETTINGS???
  4215.     AX = FFABh
  4216. Return: DS:SI -> editor setting strings???
  4217. ----------16FFAC-----------------------------
  4218. INT 16 - PC Tools v6.0 DESKTOP API - SET ???
  4219.     AX = FFACh
  4220.     DL = ???
  4221. Note:    available only when popped up
  4222. ----------16FFAD-----------------------------
  4223. INT 16 - PC Tools v6.0 DESKTOP API - SET ???
  4224.     AX = FFADh
  4225.     DL = ???
  4226. ----------16FFAE-----------------------------
  4227. INT 16 - PC Tools v6.0 DESKTOP API - GET ???
  4228.     AX = FFAEh
  4229. Return: AL = ???
  4230. ----------16FFAF-----------------------------
  4231. INT 16 - PC Tools v6.0 DESKTOP API - SET ???
  4232.     AX = FFAFh
  4233.     DL = ???
  4234. ----------16FFB0-----------------------------
  4235. INT 16 - PC Tools v6.0 DESKTOP API - SET ???
  4236.     AX = FFB0h
  4237.     BL = ???
  4238. ----------16FFB1-----------------------------
  4239. INT 16 - PC Tools v6.0 DESKTOP API - ???
  4240.     AX = FFB1h
  4241.     ???
  4242. Return: ???
  4243. ----------16FFB2-----------------------------
  4244. INT 16 - PC Tools v5.5+ DESKTOP API - GET ???
  4245.     AX = FFB2h
  4246. Return: DS:SI -> ???
  4247. ----------16FFB3-----------------------------
  4248. INT 16 - PC Tools v5.5+ DESKTOP API - ???
  4249.     AX = FFB3h
  4250.     ???
  4251. Return: ???
  4252. Note:    available only when popped up
  4253. ----------16FFB4-----------------------------
  4254. INT 16 - PC Tools v5.5+ DESKTOP API - SET ??? FLAG
  4255.     AX = FFB4h
  4256. Note:    available only when popped up
  4257. SeeAlso: AX=FFBBh
  4258. ----------16FFB5-----------------------------
  4259. INT 16 - PC Tools v5.5+ DESKTOP API - GET/SET WINDOW PARAMETERS
  4260.     AX = FFB5h
  4261.     BX = window specifier (000Fh to 0019h) (see below)
  4262.     DX = 0000h get, nonzero = set
  4263.     ES:DI -> window parameter buffer (see below)
  4264. SeeAlso: AX=FFCBh
  4265.  
  4266. Values for window specifier:
  4267.  000Fh    comm/FAX
  4268.  0014h    hotkey selection
  4269.  0015h    ASCII table
  4270.  0016h    system colors menu
  4271.  
  4272. Format of window parameters:
  4273. Offset    Size    Description
  4274.  00h    BYTE    rows in window, not counting frame
  4275.  01h    BYTE    columns in window, not counting frame
  4276.  02h    BYTE    row number of top of window
  4277.  03h    BYTE    2*column number of left of window
  4278.  04h    BYTE    character attribute for ???
  4279.  05h    BYTE    character attribute for background/border
  4280.  06h    BYTE    character attribute for ???
  4281.  07h    DWORD    pointer to ??? on screen
  4282.  0Bh  4 BYTEs    ???
  4283.  0Fh    BYTE    nonzero if window may be resized
  4284. Note:    if running in monochrome mode, character attributes at offsets 04h to
  4285.       06h are stored unchanged, but attributes other than 07h, 0Fh, or 70h
  4286.       are changed to 07h on reading
  4287. ----------16FFB6-----------------------------
  4288. INT 16 - PC Tools v5.5+ DESKTOP API - GET ???
  4289.     AX = FFB6h
  4290. Return: AH = ???
  4291.     AL = ???
  4292. ----------16FFB7-----------------------------
  4293. INT 16 - PC Tools v5.5+ DESKTOP API - GET/SET ???
  4294.     AX = FFB7h
  4295.     BX = direction
  4296.         0000h copy to buffer
  4297.         else  copy from buffer
  4298.     DS:SI -> 70-byte buffer with ???
  4299. Return: data copied
  4300. Note:    available only when popped up under v6.0+
  4301. ----------16FFB8-----------------------------
  4302. INT 16 - PC Tools v5.1+ DESKTOP API - GET/SET???
  4303.     AX = FFB8h
  4304.     BH = subfunction
  4305.         00h get
  4306.         Return: BL = old value of ???
  4307.             CL = old value of ??? (v6.0+)
  4308.             CH = old value of ??? (v6.0+)
  4309.         nonzero set
  4310.         BL = new value for ???
  4311.         CL = new value for ??? (v6.0+)
  4312.         CH = new value for ??? (v6.0+)
  4313.         DH = ???
  4314.         Return: AL = old value replaced by CL (v6.0+)
  4315.             AH = old value replaced by CH (v6.0+)
  4316. ----------16FFB9-----------------------------
  4317. INT 16 - PC Tools v5.1+ DESKTOP API - ???
  4318.     AX = FFB9h
  4319.     ???
  4320. Return: AX = ???
  4321.     CX = ???
  4322.     DS:SI -> ???
  4323.     ES:DI -> ???
  4324. ----------16FFBA-----------------------------
  4325. INT 16 - PC Tools v5.1+ DESKTOP API - ???
  4326.     AX = FFBAh
  4327.     ???
  4328. Return: AX = ???
  4329. Note:    available only when popped up
  4330. ----------16FFBB-----------------------------
  4331. INT 16 - PC Tools v5.1+ DESKTOP API - CLEAR ??? FLAG
  4332.     AX = FFBBh
  4333. Note:    available only when popped up
  4334. SeeAlso: AX=FFB4h
  4335. ----------16FFBC-----------------------------
  4336. INT 16 - PC Tools v5.1+ DESKTOP API - RESTORE ORIGINAL SCREEN???
  4337.     AX = FFBCh
  4338. ----------16FFBD-----------------------------
  4339. INT 16 - PC Tools v5.1+ DESKTOP API - ??? DATABASE INDEXING MESSAGES
  4340.     AX = FFBDh
  4341.     ???
  4342. Return: ???
  4343. ----------16FFBE-----------------------------
  4344. INT 16 - PC Tools v5.1+ DESKTOP API - ???
  4345.     AX = FFBEh
  4346.     ???
  4347. Return: ???
  4348. Note:    available only when popped up
  4349. ----------16FFBF-----------------------------
  4350. INT 16 - PC Tools v5.1+ DESKTOP API - ???
  4351.     AX = FFBFh
  4352.     BX = DOS file handle to write on
  4353.     ???
  4354. Return: ???
  4355. Note:    available only when popped up
  4356. ----------16FFC0-----------------------------
  4357. INT 16 - PC Tools v5.1+ DESKTOP API - ???
  4358.     AX = FFC0h
  4359.     ???
  4360. Return: AX = 0000h if successful
  4361.     AX = FFFFh on error
  4362. Note:    available only when popped up
  4363. ----------16FFC1-----------------------------
  4364. INT 16 - PC Tools v5.1+ DESKTOP API - ???
  4365.     AX = FFC1h
  4366.     BL = ???
  4367.     ES:DI -> data structure (see below)
  4368.     ???
  4369. Return: AX = ???
  4370. Note:    available only when popped up
  4371.  
  4372. Format of data structure:
  4373. Offset    Size    Description
  4374.  00h    WORD    ???
  4375.  02h    WORD    ???
  4376.  04h    WORD    ???
  4377.  06h    WORD    ???
  4378.  08h    WORD    ???
  4379.  0Ah    BYTE    ???
  4380.  0Bh    BYTE    ???
  4381.     ???
  4382. ----------16FFC2-----------------------------
  4383. INT 16 - PC Tools v5.1+ DESKTOP API - ???
  4384.     AX = FFC2h
  4385.     ???
  4386. Return: AH = ???
  4387.     CX = ???
  4388.     DH = ???
  4389.     DL = ???
  4390. Note:    available only when popped up
  4391. SeeAlso: AX=FFC3h
  4392. ----------16FFC3-----------------------------
  4393. INT 16 - PC Tools v5.1+ DESKTOP API - ???
  4394.     AX = FFC3h
  4395.     ???
  4396. Return: AH = ???
  4397.     CX = ???
  4398.     DH = ???
  4399.     DL = ???
  4400. Note:    available only when popped up
  4401. SeeAlso: AX=FFC2h
  4402. ----------16FFC4-----------------------------
  4403. INT 16 - PC Tools v5.1+ DESKTOP API - GET ???
  4404.     AX = FFC4h
  4405. Return: AL = ???
  4406.     BX = segment of scratch space???
  4407.     CX = segment of stored screen data (section covered by window???)
  4408.     DX = segment of window parameters for ???
  4409.     ES:BP -> ???
  4410. Note:    available only when popped up in versions prior to 6.0
  4411. ----------16FFC5-----------------------------
  4412. INT 16 - PC Tools v5.1+ DESKTOP API - CHECK WHETHER DESKTOP LOADED RESIDENT
  4413.     AX = FFC5h
  4414. Return: BL = nonzero if loaded resident
  4415.        = 00h if nonresident
  4416. Note:    available only when popped up
  4417. SeeAlso: AX=FFEFh,AX=FFF3h
  4418. ----------16FFC6-----------------------------
  4419. INT 16 - PC Tools v5.1+ DESKTOP API - SET ???
  4420.     AX = FFC6h
  4421.     BL = new value for ???
  4422. ----------16FFC7-----------------------------
  4423. INT 16 - PC Tools v5.1+ DESKTOP API - REMOVE WINDOW
  4424.     AX = FFC7h
  4425.     ???
  4426. Return: ???
  4427. ----------16FFC8-----------------------------
  4428. INT 16 - PC Tools v5.1+ DESKTOP API - GET ???
  4429.     AX = FFC8h
  4430. Return: DS:SI -> ???
  4431. Note:    valid only while popped up
  4432. ----------16FFC9-----------------------------
  4433. INT 16 - PC Tools v5.1+ DESKTOP API - COPY DATA TO CLIPBOARD
  4434.     AX = FFC9h
  4435.     DS:SI -> characters to store in clipboard
  4436.     CX = size in bytes
  4437. Return: CF set on error
  4438. Notes:    available only when popped up
  4439.     while copying, bytes of 00h and 0Ah are skipped
  4440. ----------16FFCA-----------------------------
  4441. INT 16 - PC Tools v5.1+ DESKTOP API - SET ???
  4442.     AX = FFCAh
  4443.     DX = ???
  4444. Return: AX destroyed
  4445. Note:    available only when popped up
  4446. ----------16FFCB-----------------------------
  4447. INT 16 - PC Tools v5.1+ DESKTOP API - SELECT WINDOW PARAMETERS???
  4448.     AX = FFCBh
  4449.     DX = window specifier???
  4450. Return: AX destroyed
  4451. Note:    available only when popped up
  4452. SeeAlso: AX=FFB5h
  4453. ----------16FFCC-----------------------------
  4454. INT 16 - PC Tools v5.1+ DESKTOP API - DISPLAY ASCIZ STRING CENTERED IN WINDOW
  4455.     AX = FFCCh
  4456.     DS:SI -> ASCIZ string
  4457. Return: AX = ???
  4458.     CX = ???
  4459.     ES:DI -> address past last character displayed (v5.1/5.5)
  4460.           -> ??? on menu bar
  4461. ----------16FFCD-----------------------------
  4462. INT 16 - PC Tools v5.1+ DESKTOP API - ???
  4463.     AX = FFCDh
  4464.     DS:DX -> ???
  4465. Return: ???
  4466. Note:    available only when popped up
  4467. ----------16FFCE-----------------------------
  4468. INT 16 - PC Tools v5.1+ DESKTOP API - SET ??? DELAYS
  4469.     AX = FFCEh
  4470.     CX = ???
  4471. Return: nothing???
  4472. ----------16FFCF-----------------------------
  4473. INT 16 - PC Tools v5.1+ DESKTOP API - CLOSE PRINTER/PRINT FILE
  4474.     AX = FFCFh
  4475. Note:    available only when popped up
  4476. ----------16FFD0-----------------------------
  4477. INT 16 - PC Tools v5.1+ DESKTOP API - PREPARE TO PRINT???
  4478.     AX = FFD0h
  4479.     ???
  4480. Return: ???
  4481. Note:    available only when popped up
  4482. ----------16FFD1-----------------------------
  4483. INT 16 - PC Tools v5.1+ DESKTOP API - DISPLAY PRINT OPTIONS MENU
  4484.     AX = FFD1h
  4485. Return: BX = number of copies
  4486.     DX = destination
  4487.         00h cancel
  4488.         01h LPT1
  4489.         02h LPT2
  4490.         03h    LPT3
  4491.         04h    COM1
  4492.         05h    COM2
  4493.         06h disk file
  4494. Note:    available only when popped up
  4495. ----------16FFD2-----------------------------
  4496. INT 16 - PC Tools v5.1+ DESKTOP API - ???
  4497.     AX = FFD2h
  4498.     BX = ???
  4499. Return: BL = ???
  4500. Note:    available only when popped up
  4501. ----------16FFD3-----------------------------
  4502. INT 16 - PC Tools v5.1+ DESKTOP API - ???
  4503.     AX = FFD3h
  4504.     DS:SI -> 92-byte data record for ???
  4505. Return: ???
  4506. ----------16FFD4BH3C-------------------------
  4507. INT 16 - PC Tools v5.1+ DESKTOP API - CREATE/OPEN/DELETE FILE
  4508.     AX = FFD4h
  4509.     BH = 3Ch create file (with no attributes)
  4510.          3Dh open file
  4511.          41h delete file
  4512.     BL = access mode
  4513.          00h read only
  4514.          01h write only
  4515.          02h read/write
  4516.     DS:SI -> ASCIZ filename
  4517. Return: BX = file handle
  4518.         0000h on error
  4519. Note:    operation is attempted in (in order) the directory from which the
  4520.       desktop was started/run???, the directory specified with the
  4521.       filename, X:\PCTOOLS\, and X:\
  4522. ----------16FFD5-----------------------------
  4523. INT 16 - PC Tools v5.1+ DESKTOP API - ???
  4524.     AX = FFD5h
  4525.     ???
  4526. Return: ???
  4527. Note:    available only when popped up
  4528. ----------16FFD6-----------------------------
  4529. INT 16 - PC Tools v5.1+ DESKTOP API - ???
  4530.     AX = FFD6h
  4531.     BX = ???
  4532.     CX = ???
  4533.     DX = offset in ???
  4534.     ???
  4535. Return: ???
  4536. Note:    available only when popped up
  4537. ----------16FFD7-----------------------------
  4538. INT 16 - PC Tools v5.1+ DESKTOP API - ???
  4539.     AX = FFD7h
  4540.     ???
  4541. Return: BL = ???
  4542. Note:    available only when popped up
  4543. ----------16FFD8-----------------------------
  4544. INT 16 - PC Tools v5.1+ DESKTOP API - SAFE CREATE FILE
  4545.     AX = FFD8h
  4546.     DS:BX -> ASCIZ filename
  4547. Return: BX = file handle
  4548.         0000h on error
  4549. Note:    pops up confirmation menu if file already exists
  4550.     only available when popped up???
  4551. ----------16FFD9-----------------------------
  4552. INT 16 - PC Tools v5.1+ DESKTOP API - GET ???
  4553.     AX = FFD9h
  4554. Return: AX = ???
  4555. Note:    available only when popped up
  4556. ----------16FFDA-----------------------------
  4557. INT 16 - PC Tools v5.1+ DESKTOP API - GET NAME OF LAST FILE OPENED
  4558.     AX = FFDAh
  4559.     DS:SI -> ??? (v5.1/5.5 only)
  4560. Return: DS:SI -> filename
  4561. ----------16FFDB-----------------------------
  4562. INT 16 - PC Tools v5.1+ DESKTOP API - SET ???
  4563.     AX = FFDBh
  4564.     BL = ???
  4565. Note:    available only when popped up
  4566. ----------16FFDC-----------------------------
  4567. INT 16 - PC Tools v5.1+ DESKTOP API - UNHOOK
  4568.     AX = FFDCh
  4569. Return: interrupt vectors 09h, 10h (v6.0+), 16h, 1Ch, and 21h restored to
  4570.       original values
  4571. ----------16FFDDBX0000-----------------------
  4572. INT 16 - PC Tools v5.1+ PCShell API - INSTALLATION CHECK
  4573.     AX = FFDDh
  4574.     BX = 0000h
  4575. Return: CX = 5555h 
  4576.     DX = 5555h if PCShell installed in resident mode
  4577. ----------16FFDDBX0001-----------------------
  4578. INT 16 - PC Tools v5.1+ PCShell API - REQUEST POP-UP
  4579.     AX = FFDDh
  4580.     BX = 0001h
  4581. SeeAlso: AX=FFDDh/BX=0003h
  4582. ----------16FFDDBX0002-----------------------
  4583. INT 16 - PC Tools v5.1-5.5 PCShell API - GET ???
  4584.     AX = FFDDh
  4585.     BX = 0002h
  4586. Return: AL = 
  4587.         00h ???
  4588.         01h ???
  4589. Note:    PCShell v6.0 displays the error message "Incorrect PCRUN version",
  4590.       awaits a keystroke, and aborts the current process
  4591. ----------16FFDDBX0003-----------------------
  4592. INT 16 - PC Tools v5.1+ PCShell API - REQUEST POP-UP
  4593.     AX = FFDDh
  4594.     BX = 0003h
  4595. SeeAlso: AX=FFDDh/BX=0001h
  4596. ----------16FFDDBX0004-----------------------
  4597. INT 16 - PC Tools v5.1+ PCShell API - GET ???
  4598.     AX = FFDDh
  4599.     BX = 0004h
  4600. Return: CF clear if successful
  4601.         DS:SI -> ???
  4602. ----------16FFDDBX0005-----------------------
  4603. INT 16 - PC Tools v5.1+ PCShell API - ???
  4604.     AX = FFDDh
  4605.     BX = 0005h
  4606.     ???
  4607. Return: ???
  4608. ----------16FFDDBX0006-----------------------
  4609. INT 16 - PC Tools v5.1+ PCShell API - ???
  4610.     AX = FFDDh
  4611.     BX = 0006h
  4612.     ???
  4613. Return: ???
  4614. ----------16FFDDBX0007-----------------------
  4615. INT 16 - PC Tools v5.1+ PCShell API - SET ??? FLAG
  4616.     AX = FFDDh
  4617.     BX = 0007h
  4618. Return: CF clear if successful
  4619. SeeAlso: AX=FFDDh/BX=0008h
  4620. ----------16FFDDBX0008-----------------------
  4621. INT 16 - PC Tools v5.1+ PCShell API - CLEAR ??? FLAG
  4622.     AX = FFDDh
  4623.     BX = 0008h
  4624. Return: ???
  4625. SeeAlso: AX=FFDDh/BX=0007h
  4626. ----------16FFDDBX0009-----------------------
  4627. INT 16 - PC Tools v6.0 PCShell API - GET PCRUN PARAMETERS
  4628.     AX = FFDDh
  4629.     BX = 0009h
  4630. Return: CF clear if successful
  4631.         DS:SI -> list of pointers (see below)
  4632.  
  4633. Format of returned pointer list:
  4634. Offset    Size    Description
  4635.  00h    WORD    offset of WORD containing ???
  4636.  02h    WORD    offset of name of program to execute
  4637.  04h    WORD    offset of 80-byte buffer for ???
  4638.  06h    WORD    offset of buffer for ??? (length in WORD preceding buffer)
  4639.  08h    WORD    offset of buffer for ??? (length in WORD preceding buffer)
  4640. ----------16FFDDBX000A-----------------------
  4641. INT 16 - PC Tools v6.0 PCRUN API - INSTALLATION CHECK
  4642.     AX = FFDDh
  4643.     BX = 000Ah
  4644. Return: CX = 5555h if running
  4645.     DX = 5555h
  4646. Note:    also sets a flag
  4647. ----------16FFDDBX000B-----------------------
  4648. INT 16 - PC Tools v6.0 PCRUN API - ???
  4649.     AX = FFDDh
  4650.     BX = 000Bh
  4651.     ???
  4652. Return: CX = 5555h if PCRUN active
  4653.     DX = 5555h
  4654. Note:    also clears flag set by AX=FFDDh/BX=000Ah
  4655. ----------16FFDE-----------------------------
  4656. INT 16 - PC Tools v5.1+ DESKTOP API - DISPLAY POPUP MENU
  4657.     AX = FFDEh
  4658.     DS:DX -> menu description (must be on a paragraph boundary)
  4659. Return: AX = ???
  4660.         AL seems to be the number of the selected button
  4661. Note:    available only when popped up
  4662. ----------16FFDF-----------------------------
  4663. INT 16 - PC Tools v5.1+ DESKTOP API - ???
  4664.     AX = FFDFh
  4665.     ???
  4666. Return: ???
  4667. ----------16FFE0-----------------------------
  4668. INT 16 - PC Tools v5.1+ DESKTOP API - ???
  4669.     AX = FFE0h
  4670.     CX = ???
  4671.     DX = ???
  4672. Note:    available only when popped up
  4673. ----------16FFE1-----------------------------
  4674. INT 16 - PC Tools v5.1+ DESKTOP API - BEEP
  4675.     AX = FFE1h
  4676. ----------16FFE2-----------------------------
  4677. INT 16 - PC Tools v5.1+ DESKTOP API - ???
  4678.     AX = FFE2h
  4679.     DX = ???
  4680. Return: ???
  4681. Note:    available only when popped up
  4682. ----------16FFE3-----------------------------
  4683. INT 16 - PC Tools v5.1+ DESKTOP API - PRINT CHARACTER
  4684.     AX = FFE3h
  4685.     BL = character to print to currently open printer or print file
  4686. Return: CF set on error
  4687. Note:    available only when popped up
  4688. ----------16FFE4-----------------------------
  4689. INT 16 - PC Tools v5.1+ DESKTOP API - ???
  4690.     AX = FFE4h
  4691.     DX = segment of ???
  4692. Return: ???
  4693. Note:    available only when popped up
  4694. ----------16FFE5-----------------------------
  4695. INT 16 - PC Tools v5.1+ DESKTOP API - POP UP FILE SELECTION MENU
  4696.     AX = FFE5h
  4697.     DS:SI -> ASCIZ wildcard filespec followed by ASCIZ menu title
  4698.     DX = segment of window parameters???
  4699. Return: AX = DOS file handle for file
  4700.         DS:DX -> filename???
  4701.        = FFFFh if cancelled by user
  4702. Note:    available only when popped up
  4703. SeeAlso: AX=FFDAh
  4704. ----------16FFE6-----------------------------
  4705. INT 16 - PC Tools v5.1+ DESKTOP API - CHECK FOR AND GET KEYSTROKE
  4706.     AX = FFE6h
  4707. Return: AX = 0000h if no key available
  4708.          else  BIOS keycode
  4709. Notes:    available only when popped up
  4710.     invokes INT 28 idle interrupt before checking for key
  4711. ----------16FFE7-----------------------------
  4712. INT 16 - PC Tools v5.1+ DESKTOP API - ???
  4713.     AX = FFE7h
  4714.     BX = segment of ???
  4715. Return: ???
  4716. Note:    available only when popped up
  4717. ----------16FFE8-----------------------------
  4718. INT 16 - PC Tools v5.1+ DESKTOP API - DISPLAY NUMBER
  4719.     AX = FFE8h
  4720.     CX = number
  4721.     DH = attribute
  4722.     DS:SI -> destination for ASCII number
  4723. Return: DS:SI buffer filled in with alternating characters and attributes
  4724. ----------16FFE9-----------------------------
  4725. INT 16 - PC Tools v5.1+ DESKTOP API - GET FILE LIST???
  4726.     AX = FFE9h
  4727. Return: BX = segment of file/directory list (14 bytes per file, NUL-padded)
  4728. Note:    available only when popped up
  4729. ----------16FFEA-----------------------------
  4730. INT 16 - PC Tools v5.1+ DESKTOP API - DISPLAY COUNTED STRING
  4731.     AX = FFEAh
  4732.     DS:SI -> counted string (count byte followed by string)
  4733. Return: ???
  4734. Note:    available only when popped up
  4735. ----------16FFEB-----------------------------
  4736. INT 16 - PC Tools v5.1+ DESKTOP API - ???
  4737.     AX = FFEBh
  4738.     ???
  4739. Return: ???
  4740. ----------16FFEC-----------------------------
  4741. INT 16 - PC Tools v5.1+ DESKTOP API - GET KEY
  4742.     AX = FFECh
  4743.     DS:SI -> FAR routine to ???
  4744.     BX = ???
  4745.     ???
  4746. Return: AX = keystroke
  4747.         FFFFh if F10 pressed to go to menu
  4748. Notes:    available only when popped up
  4749.     invokes INT 28 while waiting for keystroke
  4750.     F10 is hotkey to Desktop menu
  4751. ----------16FFED-----------------------------
  4752. INT 16 - PC Tools v5.1+ DESKTOP API - GET ???
  4753.     AX = FFEDh
  4754. Return: AX = ???
  4755. Note:    available only when popped up
  4756. ----------16FFEE-----------------------------
  4757. INT 16 - PC Tools v5.1+ DESKTOP API - DEFINE PULLDOWN MENUS
  4758.     AX = FFEEh
  4759.     DS:SI -> pulldown menu system description (see below)
  4760. Return: AX destroyed
  4761. Notes:    available only when popped up
  4762.     if the accessory does not need any menu items of its own, it should
  4763.       call AX=FFFAh instead
  4764. SeeAlso: AX=FFF7h,AX=FFFAh
  4765.  
  4766. Format of pulldown menu system description:
  4767. Offset    Size    Description
  4768.  00h    WORD    offset of menu bar contents (counted string)
  4769.  02h    WORD    number of items on menu bar
  4770.  04h 10 BYTEs    scan codes for hotkeying to each of up to ten menu items
  4771.  0Eh 10    BYTEs    which character to highlight in each menu item (01h=first)
  4772.  18h    WORD    offset of first menu definition (see below)
  4773.  1Ah    WORD    offset of second menu definition
  4774.     ...
  4775.  
  4776. Format of menu definition:
  4777. Offset    Size    Description
  4778.  00h    WORD    offset of menu contents (see below)
  4779.  02h    WORD    number of entries in menu
  4780.  04h    for each entry:
  4781.         Offset    Size    Description
  4782.          00h    BYTE    scancode of Alt-key to invoke entry
  4783.          01h    BYTE    character to highlight (01h=first, etc)
  4784.          02h    WORD    offset of FAR routine to handle selection
  4785.  
  4786. Format of menu contents:
  4787. Offset    Size    Description
  4788.  00h    BYTE    number of lines in menu
  4789.  01h    BYTE    width of menu
  4790.  02h  N BYTEs    counted strings, one for each line in menu
  4791. ----------16FFEFCX0000-----------------------
  4792. INT 16 - PC Tools v5.1+ DESKTOP API - INSTALLATION CHECK
  4793.     AX = FFEFh
  4794.     CX = 0000h
  4795. Return: CX = ABCDh if PC Tools DESKTOP.EXE installed
  4796.         BX = segment of resident portion
  4797.         AX = ??? (v5.1/5.5 only)
  4798. SeeAlso: AX=FFC5h,AX=FFF3h
  4799. ----------16FFF0-----------------------------
  4800. INT 16 - PC Tools v5.1+ DESKTOP API - SET ???
  4801.     AX = FFF0h
  4802.     DX = ???
  4803. Return: AX destroyed
  4804. Note:    available only when popped up
  4805. ----------16FFF1BX0000-----------------------
  4806. INT 16 - PC Tools v5.1+ DESKTOP API - ALTERNATE INSTALLATION CHECK
  4807.     AX = FFF1h
  4808.     BX = 0000h  leave ??? flag as is
  4809.         nonzero set ??? flag
  4810. Return: CX = 5555h if installed
  4811.     DX = 5555h
  4812. ----------16FFF2-----------------------------
  4813. INT 16 - PC Tools v5.1+ DESKTOP API - DISPLAY HELP LINE
  4814.     AX = FFF2h
  4815.     DS:SI -> ASCIZ function key label string (each label preceded by '[')
  4816.         or help text
  4817. Return: AX destroyed
  4818. Notes:    available only when popped up
  4819.     if the specified string does not start with '[', it is displayed
  4820.       centered on the bottom line, else the function key labels are shown
  4821. ----------16FFF3-----------------------------
  4822. INT 16 - PC Tools v5.1+ DESKTOP API - PREPARE TO UNLOAD RESIDENT DESKTOP
  4823.     AX = FFF3h
  4824. Note:    releases any EMS being used; restores video mode, page, and cursor
  4825.       shape; and restores interrupt vectors
  4826. SeeAlso: AX=FFC5h,AX=FFEFh
  4827. ----------16FFF4-----------------------------
  4828. INT 16 - PC Tools v5.1+ DESKTOP API - ???
  4829.     AX = FFF4h
  4830.     ???
  4831. Return: ???
  4832. Note:    available only when popped up
  4833. SeeAlso: AX=FFF6h
  4834. ----------16FFF5-----------------------------
  4835. INT 16 - PC Tools v5.1+ DESKTOP API - GET SCREEN ATTRIBUTE ARRAY
  4836.     AX = FFF5h
  4837. Return: ES:BX -> screen attributes data structure (see below)
  4838.     AL = ??? (v6.0+)
  4839.  
  4840. Format of attribute data structure:
  4841. Offset    Size    Description
  4842.  -1    BYTE    attribute for desktop background
  4843.  00h    BYTE    attribute for normal characters on desktop menu
  4844.  01h    BYTE    attribute for highlighted characters on desktop menu
  4845.  02h  5    BYTEs    ???
  4846.  07h    BYTE    attribute for dialog boxes
  4847.  08h 15 BYTEs    ???
  4848.  17h    BYTE    attribute for message boxes
  4849. ----------16FFF6-----------------------------
  4850. INT 16 - PC Tools v5.1+ DESKTOP API - INVOKE NOTEPAD EDITOR
  4851.     AX = FFF6h
  4852.     DS = segment of editor buffer structure (see below)
  4853.     BX = ???
  4854.     DX = segment of window parameters structure (see AX=FFB5h)
  4855. Return: ???
  4856. Note:    available only when popped up
  4857. SeeAlso: AX=FFF4h
  4858.  
  4859. Format of editor buffer structure:
  4860. Offset    Size    Description
  4861.  00h    WORD    offset of current cursor position in buffer segment
  4862.  02h  2 BYTEs    ???
  4863.  04h    WORD    offset of beginning of file data in buffer segment
  4864.  06h 10 BYTEs    ???
  4865.  10h  N BYTEs    ASCIZ name of file being edited
  4866. ----------16FFF7-----------------------------
  4867. INT 16 - PC Tools v5.1+ DESKTOP API - PROCESS MENU BAR ENTRY???
  4868.     AX = FFF7h
  4869.     DS:SI -> ???
  4870.     ???
  4871. Return: ???
  4872. Notes:    available only when popped up
  4873.     performs input processing on the menu bar set up with AX=FFEEh
  4874. SeeAlso: AX=FFEEh,AX=FFFBh
  4875. ----------16FFF8-----------------------------
  4876. INT 16 - PC Tools v5.1+ DESKTOP API - DRAW EMPTY WINDOW
  4877.     AX = FFF8h
  4878.     DS:0000h -> window parameters structure (see AX=FFB5h)
  4879.     DS:BX -> DWORD to store address of ??? on screen
  4880. Return: ???
  4881. ----------16FFF9-----------------------------
  4882. INT 16 - PC Tools v5.1+ DESKTOP API - DEFINE SCREEN REFRESH ROUTINE
  4883.     AX = FFF9h
  4884.     ES:BX -> FAR routine to redisplay the utility's window
  4885. Note:    available only when popped up
  4886. ----------16FFFA-----------------------------
  4887. INT 16 - PC Tools v5.1+ DESKTOP API - DEFINE STANDARD PULLDOWN MENUS
  4888.     AX = FFFAh
  4889. Notes:    available only when popped up
  4890.     adds the "Window" option to the "Desktop" option which is the only one
  4891.       available when no accessories are active.  Unlike AX=FFEEh, no
  4892.       additional menu items are added between "Desktop" and "Window"
  4893. SeeAlso: AX=FFEEh,AX=FFFBh
  4894. ----------16FFFB-----------------------------
  4895. INT 16 - PC Tools v5.1+ DESKTOP API - PROCESS STANDARD MENU BAR
  4896.     AX = FFFBh
  4897. Return: ???
  4898. Notes:    available only when popped up
  4899.     performs input processing on the standard menu bar set up with AX=FFFAh
  4900. SeeAlso: AX=FFF7h
  4901. ----------16FFFC-----------------------------
  4902. INT 16 - PC Tools v5.1+ DESKTOP API - GET HOTKEYS AND KEYBOARD VECTOR
  4903.     AX = FFFCh
  4904. Return: ES:BX -> hotkey table (see below)
  4905.     DS:DX = original INT 9 vector
  4906.  
  4907. Format of hotkey table:
  4908. Offset    Size    Description
  4909.  00h  2 BYTEs    scancode/shift state for desktop hotkey
  4910.  02h  2 BYTEs    scancode/shift state for clipboard paste key
  4911.  04h  2 BYTEs    scancode/shift state for clipboard copy key
  4912.  06h  2 BYTEs    scancode/shift state for screen autodial key
  4913. ----------16FFFD-----------------------------
  4914. INT 16 - PC Tools v5.1+ DESKTOP API - COPY ???
  4915.     AX = FFFDh
  4916. Return: AX destroyed
  4917. Note:    copies 4000 bytes from ??? to ??? under certain circumstances
  4918. ----------16FFFE-----------------------------
  4919. INT 16 - PC Tools v5.1+ DESKTOP API - SHOW MOUSE CURSOR
  4920.     AX = FFFEh
  4921. SeeAlso: AX=FFFFh,INT 33/AX=0001h
  4922. ----------16FFFF-----------------------------
  4923. INT 16 - PC Tools v5.1+ DESKTOP API - HIDE MOUSE CURSOR
  4924.     AX = FFFFh
  4925. SeeAlso: AX=FFFEh,INT 33/AX=0002h
  4926. ----------17----DX0ABC-----------------------
  4927. INT 17 - PRINTER - LPTx v5.x INSTALLATION CHECK
  4928.     DX = 0ABCh
  4929. Return: AX = AAAAh
  4930.     DX = BAAAh
  4931.     ES = code segment of resident portion
  4932. ----------17----DX0B90-----------------------
  4933. INT 17 - PRINTER - LPTx v6.x INSTALLATION CHECK
  4934.     DX = 0B90h
  4935. Return: DX = ABBBh
  4936.     ES = code segment of resident portion
  4937. ----------17----DX0B91-----------------------
  4938. INT 17 - PRINTER - LPTx v7.x INSTALLATION CHECK
  4939.     DX = 0B91h
  4940. Return: DX = ABCBh
  4941.     ES = code segment of resident portion
  4942. ----------17----DX0F5F-----------------------
  4943. INT 17 - PRINTER - LPTx v4.x INSTALLATION CHECK
  4944.     DX = 0F5Fh
  4945. Return: AX = AAAAh
  4946.     DX = F555h
  4947.     ES = code segment of resident portion
  4948. ----------1700-------------------------------
  4949. INT 17 - PRINTER - WRITE CHARACTER
  4950.     AH = 00h
  4951.     AL = character to write
  4952.     DX = printer number (00h-02h)
  4953. Return: AH = printer status
  4954.         bit 7: not busy
  4955.         6: acknowledge
  4956.         5: out of paper
  4957.         4: selected
  4958.         3: I/O error
  4959.         2: unused
  4960.         1: unused
  4961.         0: timeout
  4962. ----------1701-------------------------------
  4963. INT 17 - PRINTER - INITIALIZE PORT
  4964.     AH = 01h
  4965.     DX = printer number (00h-02h)
  4966. Return: AH = printer status (see AH=00h)
  4967. SeeAlso: AH=02h
  4968. ----------1702-------------------------------
  4969. INT 17 - PRINTER - GET STATUS
  4970.     AH = 02h
  4971.     DX = printer number (00h-02h)
  4972. Return: AH = printer status (see AH=00h)
  4973. SeeAlso: AH=01h
  4974. ----------1702--DX0000-----------------------
  4975. INT 17 - INSET - INSTALLATION CHECK
  4976.     AH = 02h
  4977.     DX = 0000h
  4978.     CX = 07C3h (1987d)
  4979. Return: CX = 07C2h (1986d) if installed
  4980. Note:    INSET is a text/graphics integration program
  4981. ----------172400-----------------------------
  4982. INT 17 - Shamrock Software NET.24 v3.11+ - ENABLE/DISABLE API FUNCTIONS
  4983.     AX = 2400h
  4984.     DL = new state
  4985.         00h disabled
  4986.         01h enabled
  4987. Return: DL = 24h if installed
  4988.     DH = minor version number
  4989.     CX = network address of this machine
  4990.     AL = status
  4991.         00h successful
  4992.         01h timeout
  4993.         02h header error
  4994.         03h data error
  4995.         04h busy
  4996.         05h invalid parameters
  4997. SeeAlso: AX=2403h,INT 16/AX=4500h
  4998. ----------172401-----------------------------
  4999. INT 17 - Shamrock Software NET.24 v3.11+ - RECEIVE BLOCK, NO HANDSHAKE
  5000.     AX = 2401h
  5001.     BL = timeout in clock ticks
  5002. Return: AL = status (see AX=2400h)
  5003.     DX:BX -> receive buffer
  5004. SeeAlso: AX=2402h,AX=2404h,AX=2408h
  5005. ----------172402-----------------------------
  5006. INT 17 - Shamrock Software NET.24 v3.11+ - TRANSMIT BLOCK, NO HANDSHAKE
  5007.     AX = 2402h
  5008.     transmit buffer filled (see AX=2403h)
  5009. Return: AL = status (see AX=2400h)
  5010. SeeAlso: AX=2401h,AX=2403h,AX=2404h,AX=2409h
  5011. ----------172403-----------------------------
  5012. INT 17 - Shamrock Software NET.24 v3.11+ - GET STATUS AND TRANSMISSION BUFFER
  5013.     AX = 2403h
  5014. Return: AL = status (see AX=2400h)
  5015.     CX = number of characters in receive ring buffer
  5016.     DX:BX -> transmit buffer
  5017. SeeAlso: AX=2400h,AX=2402h
  5018. ----------172404-----------------------------
  5019. INT 17 - Shamrock Software NET.24 v3.11+ - SEND ACK BLOCK
  5020.     AX = 2404h
  5021.     BX = target address
  5022. Return: AL = status (see AX=2400h)
  5023. SeeAlso: AX=2402h,AX=2405h
  5024. ----------172405-----------------------------
  5025. INT 17 - Shamrock Software NET.24 v3.11+ - SEND NAK BLOCK
  5026.     AX = 2405h
  5027.     BX = target address
  5028. Return: AL = status (see AX=2400h)
  5029. SeeAlso: AX=2402h,AX=2404h
  5030. ----------172406-----------------------------
  5031. INT 17 - Shamrock Software NET.24 v3.11+ - PREPARE CHARACTER-ORIENTED RECEIVE
  5032.     AX = 2406h
  5033. Return: AL = status (see AX=2400h)
  5034. SeeAlso: AX=2407h,AX=240Ah
  5035. ----------172407-----------------------------
  5036. INT 17 - Shamrock Software NET.24 v3.11+ - RECEIVE CHARACTER FROM REMOTE
  5037.     AX = 2407h
  5038. Return: AL = status (see also AX=2400h)
  5039.         06h end of data
  5040.     DL = received character
  5041. SeeAlso: AX=2406h
  5042. ----------172408-----------------------------
  5043. INT 17 - Shamrock Software NET.24 v3.11+ - RECEIVE BLOCK, WITH HANDSHAKE
  5044.     AX = 2408h
  5045. Return: AL = status (see also AX=2400h)
  5046.         06h end of data
  5047.     CX = number of bytes in receive buffer
  5048.     DX:SI -> receive buffer
  5049. SeeAlso: AX=2401h,AX=2405h,AX=2409h
  5050. ----------172409-----------------------------
  5051. INT 17 - Shamrock Software NET.24 v3.11+ - TRANSMIT COMMAND, WITH HANDSHAKE
  5052.     AX = 2409h
  5053.     BX = target address
  5054.     CX = number of data byte
  5055.     DL = command code to send
  5056.     DS:SI -> data bytes for command
  5057. Return: AL = status (see also AX=2400h)
  5058.         03h no response
  5059.         06h remote currently unable to perform command
  5060. SeeAlso: AX=2405h,AX=2408h
  5061. ----------17240A-----------------------------
  5062. INT 17 - Shamrock Software NET.24 v3.11+ - PREPARE CHARACTER-ORIENTED TRANSMIT
  5063.     AX = 240Ah
  5064. Return: AL = status (see AX=2400h)
  5065. SeeAlso: AX=2406h,AX=240Bh,AX=240Ch
  5066. ----------17240B-----------------------------
  5067. INT 17 - Shamrock Software NET.24 v3.11+ - TRANSMIT SINGLE CHARACTER TO REMOTE
  5068.     AX = 240Bh
  5069.     DL = character to send
  5070. Return: AL = status (see also AX=2400h)
  5071.         03h transmission error
  5072.         06h write error
  5073. SeeAlso: AX=2407h,AX=240Ah,AX=240Ch
  5074. ----------17240C-----------------------------
  5075. INT 17 - Shamrock Software NET.24 v3.11+ - END CHARACTER-ORIENTED TRANSMIT
  5076.     AX = 240Ch
  5077. Return: AL = status (see also AX=2400h)
  5078.         03h transmission error
  5079.         06h remote breaks connection
  5080. SeeAlso: AX=240Ah,AX=240Bh
  5081. ----------1760-------------------------------
  5082. INT 17 - FLASHUP.COM - INSTALLATION CHECK
  5083.     AH = 60h
  5084. Return: AL = 60h
  5085.     DX = CS of resident code
  5086. Notes:    FLASHUP.COM is part of Flash-Up Windows by The Software Bottling Co.
  5087.     FLASHUP also hooks INT 10 and received commands via INT 10/AH=09h,0Ah
  5088.       consisting of an 80h followed by the actual command
  5089. SeeAlso: INT 10/AH=09h,INT 10/AH=0Ah
  5090. ----------1761-------------------------------
  5091. INT 17 - SPEEDSCR.COM - INSTALLATION CHECK
  5092.     AH = 61h
  5093. Return: AL = 61h
  5094.     DX = CS of resident code
  5095. Note:    SPEEDSCR.COM is by The Software Bottling Co.
  5096. ----------1781-------------------------------
  5097. INT 17 - Alloy NTNX, MW386 - CANCEL JOBS FOR CURRENT USER
  5098.     AH = 81h
  5099.     AL = 00h (NTNX compatibility mode)
  5100.     CL = number of jobs to cancel
  5101. Return: AL = status
  5102.         00h success
  5103.         01h..7Fh warning
  5104.         80h general failure
  5105.         81h host overloaded (NTNX only)
  5106.         82h module busy (NTNX only)
  5107.         83h host busy (NTNX only)
  5108.         84h re-entry flag set
  5109.         85h invalid request
  5110.         86h invalid printer
  5111.         87h invalid process ID
  5112.         89h access denied
  5113.         8Ah option not available for given port type
  5114.         8Bh option not available for given task type
  5115.         91h printer busy
  5116.         C2h file not found
  5117.         C3h path not found
  5118.         C4h file access failure
  5119. Note:    cancels the last CL printouts for the current task
  5120. SeeAlso: AH=82h
  5121. ----------1782-------------------------------
  5122. INT 17 - Alloy NTNX, MW386 - CANCEL ALL JOBS FOR CURRENT USER
  5123.     AH = 82h
  5124.     AL = 00h (NTNX compatibility mode)
  5125. Return: AL = status (see AH=81h)
  5126. SeeAlso: AH=81h
  5127. ----------1783-------------------------------
  5128. INT 17 - Alloy NTNX, MW386 - SET NUMBER OF COPIES
  5129.     AH = 83h
  5130.     AL = mode
  5131.         00h NTNX compatibility
  5132.         CL = number of copies (max 99, default 1)
  5133.         02h MW386 v2+
  5134.         BX = logical device number
  5135.             00h-03h = LPT1-LPT4
  5136.             04h-07h = COM1-COM4
  5137.         CX = number of copies
  5138. Return: AL = status (see AH=81h)
  5139. Note:    in NTNX compatibility mode, this function only affects LPT1
  5140. ----------1784-------------------------------
  5141. INT 17 - Alloy NTNX, MW386 - GENERATE PRINT BREAK
  5142.     AH = 84h
  5143.     AL = mode
  5144.         00h NTNX compatibility
  5145.         02h MW386 v2+
  5146.         BX = logical device number
  5147.             00h-03h = LPT1-LPT4
  5148.             04h-07h = COM1-COM4
  5149. Note:    closes spool file and tells spooler to queue the print job (LPT1 only
  5150.       under MW386 in NTNX compatibility mode)
  5151. ----------1787-------------------------------
  5152. INT 17 - Alloy NTNX - SET INDOS POINTER
  5153.     AH = 87h
  5154.     AL = 00h
  5155.     CX:BX -> buffer for user-written printer drivers
  5156. Return: BX,CX destroyed
  5157. Note:    must be executed before the printer is enabled
  5158. SeeAlso: AH=8Ah
  5159. ----------1788-------------------------------
  5160. INT 17 - Alloy NTNX, MW386 - REMOVE PRINTER FROM SPOOLER
  5161.     AH = 88h
  5162.     AL = mode
  5163.         00h NTNX compatibility
  5164.         DX = NTNX printer number
  5165.             00h host LPT1
  5166.             01h host LPT2
  5167.             02h host LPT3
  5168.             03h host LPT4
  5169.             04h host COM1
  5170.             05h host COM2
  5171.             06h user's logical COM2
  5172.             07h user's terminal AUX port
  5173.             08h user's logical COM1 (MW386 only)
  5174.         01h MW386
  5175.         DX = MW386 printer number
  5176. Return: AH = status (see AH=81h)
  5177. Note:    removes specified printer from the spooler's list of printers
  5178. SeeAlso: AH=89h,AH=8Bh
  5179. ----------1789-------------------------------
  5180. INT 17 - Alloy NTNX, MW386 - ADD PRINTER TO SPOOLER
  5181.     AH = 89h
  5182.     AL = mode
  5183.         00h NTNX compatibility
  5184.         DX = NTNX printer number (see AH=88h)
  5185.         01h MW386
  5186.         DX = MW386 printer number
  5187. Return: AL = status (see AH=81h)
  5188. Note:    the specified printer is added to the spooler's list of available
  5189.       printers
  5190. SeeAlso: AH=88h,AH=8Bh
  5191. ----------178A-------------------------------
  5192. INT 17 - Alloy NTNX - ACTIVATE USER-WRITTEN PRINTER DRIVER
  5193.     AH = 8Ah
  5194.     ???
  5195. SeeAlso: AH=92h
  5196. ----------178B-------------------------------
  5197. INT 17 - Alloy MW386 - GET PHYSICAL DEVICE NUMBER FROM NAME
  5198.     AH = 8Bh
  5199.     DS:DX -> ASCIZ printer name
  5200. Return: AL = status (see also AH=81h)
  5201.         00h successful
  5202.         DX = physical device number
  5203. SeeAlso: AH=89h,AH=8Ch,INT 14/AH=20h"Alloy"
  5204. ----------178C-------------------------------
  5205. INT 17 - Alloy MW386 - GET DEVICE NAME FROM PHYSICAL DEVICE NUMBER
  5206.     AH = 8Ch
  5207.     DX = physical device number
  5208.     ES:DI -> 17-byte buffer for ASCIZ device name
  5209. Return: AL = status (see also AH=81h)
  5210.         00h successful
  5211.         ES:DI buffer filled
  5212. SeeAlso: AH=88h,AH=8Bh
  5213. ----------178D-------------------------------
  5214. INT 17 - Alloy NTNX - RESET SPOOLER
  5215.     AH = 8Dh
  5216.     AL = 00h
  5217. Note:    clears all buffers and resets spooler to boot-up values
  5218. Return: AL = status (see AH=81h)
  5219. ----------178E-------------------------------
  5220. INT 17 - Alloy NTNX - GET INT 28 ENTRY POINT
  5221.     AH = 8Eh
  5222.     AL = 00h
  5223. Return: CX:BX -> INT 28 entry point
  5224. SeeAlso: AH=8Fh
  5225. ----------178F-------------------------------
  5226. INT 17 - Alloy NTNX - GET DOS INTERCEPT ENTRY POINT
  5227.     AH = 8Fh
  5228.     AL = 00h
  5229. Return: CX:BX -> DOS intercept routine
  5230. SeeAlso: AH=8Eh
  5231. ----------1790-------------------------------
  5232. INT 17 - Alloy NTNX, MW386 - SPOOL FILE BY NAME
  5233.     AH = 90h
  5234.     AL = mode
  5235.         00h NTNX compatibility
  5236.         DL = printer code (FFh=current) (NTNX, MW386 v1.x only)
  5237.         DH = number of copies (FFh=current) (NTNX, MW386 v1.x only)
  5238.         02h MW386 v2+
  5239.         BX = logical device number
  5240.             00h-03h = LPT1-LPT4
  5241.             04h-07h = COM1-COM4
  5242.     CX:SI -> ASCIZ pathname
  5243. Return: AL = status (see AH=81h)
  5244. Note:    in mode 00h, the file is always sent to logical LPT1
  5245. SeeAlso: AH=A0h
  5246. ----------1791-------------------------------
  5247. INT 17 - Alloy NTNX, MW386 - GET USER NUMBER AND CURRENT PRINTER
  5248.     AH = 91h
  5249.     AL = mode
  5250.         00h NTNX compatibility
  5251.         Return: CX = user number (00h = host)
  5252.             DX = currently selected printer number (00h-08h)
  5253.         01h MW386
  5254.         Return: CX = user number
  5255.             DX = physical dev number of currently selected printer
  5256.         02h MW386 v2+
  5257.         BX = logical device number
  5258.             00h-03h = LPT1-LPT4
  5259.             04h-07h = COM1-COM4
  5260.         Return: CX = user number
  5261.             DX = physical device number
  5262. Return: AL = status (see AH=81h)
  5263. SeeAlso: AH=8Ch
  5264. ----------1792-------------------------------
  5265. INT 17 - Alloy NTNX - CHECK PRINTER DRIVER
  5266.     AH = 92h
  5267.     AL = 00h
  5268.     CL = 00h
  5269. Return: CL = driver state
  5270.         01h initialized
  5271.         80h not initialized
  5272.     AX = status (see AH=81h)
  5273. SeeAlso: AH=8Ah
  5274. ----------1794-------------------------------
  5275. INT 17 - Alloy NTNX, MW386 - SELECT PRINTER
  5276.     AH = 94h
  5277.     AL = mode
  5278.         00h NTNX compatibility
  5279.         DX = NTNX printer number (see AH=88h)
  5280.         01h MW386
  5281.         DX = MW386 printer number
  5282.         02h MW386 v2+
  5283.         BX = logical printer number
  5284.         DX = MW386 printer number
  5285. Return: AL = status (see AH=81h)
  5286. Note:    modes 00h and 01h affect only logical LPT1
  5287. SeeAlso: AH=8Bh,AH=95h
  5288. ----------1795-------------------------------
  5289. INT 17 - Alloy NTNX, MW386 - GET CURRENT PRINTER
  5290.     AH = 95h
  5291.     AL = mode
  5292.         00h NTNX compatibility
  5293.         Return: DX = NTNX printer number (see AH=88h)
  5294.                 (FFFFh if current printer not compatible with NTNX)
  5295.         01h MW386
  5296.         Return: DX = MW386 printer number
  5297.         02h MW386 v2+
  5298.         BX = logical device number
  5299.             00h-03h = LPT1-LPT4
  5300.             04h-07h = COM1-COM4
  5301.         Return: DX = MW386 printer number (FFFFh = none)
  5302. Return: AL = status (see AH=81h)
  5303. Note:    modes 00h and 01h return the printer number of logical LPT1 only
  5304. SeeAlso: AH=94h
  5305. ----------1796-------------------------------
  5306. INT 17 - Alloy NTNX - SET SERIAL PORT PARAMETERS
  5307.     AH = 96h
  5308.     AL = 00h
  5309. Note:    documentation states that this is a NOP, doing only XOR AX,AX before
  5310.       returning
  5311. SeeAlso: INT 14/AH=24h
  5312. ----------1797-------------------------------
  5313. INT 17 - Alloy NTNX, MW386 - SET DATA DRIVEN PRINT BREAK
  5314.     AH = 97h
  5315.     AL = mode
  5316.         00h NTNX compatibility
  5317.         02h MW386 v2+
  5318.         BX = logical device number
  5319.             00h-03h = LPT1-LPT4
  5320.             04h-07h = COM1-COM4
  5321.     CH,CL,DH = three character break sequence
  5322.     DL = subfunction
  5323.         00h set break string
  5324.         else reset break
  5325. Return: AL = status (see AH=81h)
  5326. Notes:    mode 00h affects only logical LPT1
  5327.     when the break string is encountered, the spool file will be closed and
  5328.       queued for printing automatically
  5329.     the break string is not permanently saved, and will be reset each time
  5330.       MW386 or the user is rebooted
  5331. SeeAlso: AH=9Bh
  5332. ----------1798-------------------------------
  5333. INT 17 - Alloy NTNX - RESTART PRINTER
  5334.     AH = 98h
  5335.     AL = 00h
  5336.     DL = printer number (FFh=current)
  5337. Return: AL = status
  5338.         00h successful
  5339.         01h incorrect printer
  5340.         02h task not found
  5341. ----------1799-------------------------------
  5342. INT 17 - Alloy NTNX, MW386 - GET/SET PRINTER MODE
  5343.     AH = 99h
  5344.     AL = mode
  5345.         00h NTNX compatibility
  5346.         DL = NTNX printer number (see AH=88h)
  5347.             (FFh = task's current logical LPT1)
  5348.         DH = mode
  5349.             bit 0: get mode if 1, set mode if 0
  5350.             1: private ("attached")
  5351.             2: direct instead of spooled
  5352.             3-7 reserved (0)
  5353.         01h MW386
  5354.         DX = MW386 printer number
  5355.         CL = mode (as for DH above)
  5356. Return: AL = status (see AH=81h)
  5357.     DH = mode (bits 1 and 2 set as above)
  5358.     DL = printer owner's user number if not spooled
  5359. ----------179A-------------------------------
  5360. INT 17 - Alloy MW386 - SET TAB EXPANSION
  5361.     AH = 9Ah
  5362.     AL = mode
  5363.         00h NTNX compatibility
  5364.         DX = NTNX printer number (see AH=88h)
  5365.             (FFFFh = current logical LPT1)
  5366.         01h MW386
  5367.         DX = MW386 printer number
  5368.     CL = tab length (00h = no expansion, 01h-63h = spaces per tab)
  5369. Return: AL = status (see AH=81h)
  5370. Note:    beginning with MW386 v2.0, tab expansion is set on a per-printer basis
  5371.       rather than a per-user basis; NTNX and MW386 v1.x ignore DX
  5372. SeeAlso: AH=A4h
  5373. ----------179B-------------------------------
  5374. INT 17 - Alloy MW386 - SET PRINT BREAK TIMEOUT
  5375.     AH = 9Bh
  5376.     AL = mode
  5377.         00h NTNX compatibility
  5378.         CX = timeout value in clock ticks (1/18 sec) (00h = never)
  5379.         01h MW386
  5380.         CX = timeout value in seconds (00h = never)
  5381.         02h MW386 v2+
  5382.         BX = logical device number
  5383.             00h-03h = LPT1-LPT4
  5384.             04h-07h = COM1-COM4
  5385.         CX = timeout value in seconds (00h = never)
  5386. Return: AL = status (see AH=81h)
  5387. Notes:    modes 00h and 01h affect only the current logical LPT1
  5388.     if no data is sent to a printer for the specified amount of time, the
  5389.       spool file will be closed and queued for printing automatically
  5390. SeeAlso: AH=97h
  5391. ----------17A0-------------------------------
  5392. INT 17 - Alloy MW386 - SPOOL COPY OF FILE
  5393.     AH = A0h
  5394.     AL = mode
  5395.         00h NTNX compatibility
  5396.         DX = ??? (NTNX, MW386 v1.x only)
  5397.         02h MW386 v2+
  5398.         BX = logical device number
  5399.             00h-03h = LPT1-LPT4
  5400.             04h-07h = COM1-COM4
  5401.     CX:SI -> ASCIZ pathname
  5402. Return: AL = status (see AH=81h)
  5403. Notes:    makes a copy of the specified file in the spooler's directory, allowing
  5404.       the original file to be modified or deleted while the copy is printed
  5405.     in mode 00h, the file is printed on logical LPT1
  5406. SeeAlso: AH=90h
  5407. ----------17A4-------------------------------
  5408. INT 17 - Alloy MW386 - ENABLE/DISABLE FORM FEED
  5409.     AH = A4h
  5410.     AL = new state
  5411.         00h form feed after end of print job disabled
  5412.         01h form feed enabled
  5413. Return: AL = status (see AH=81h)
  5414. Note:    only affects the current logical LPT1
  5415. SeeAlso: AH=9Ah,AH=A6h,INT 7F/AH=05h"NTNX (Host)"
  5416. ----------17A6-------------------------------
  5417. INT 17 - Alloy MW386 - ENABLE/DISABLE BANNER PAGE
  5418.     AH = A6h
  5419.     AL = new state
  5420.         00h banner page before print job disabled
  5421.         01h banner page enabled
  5422. Return: AL = status (see AH=81h)
  5423. Note:    only affects the current logical LPT1
  5424. SeeAlso: AH=A4h
  5425. ----------17A7-------------------------------
  5426. INT 17 - Alloy MW386 v2+ - GET/SET SPOOL FLAGS
  5427.     AH = A7h
  5428.     AL = spool flags
  5429.         bit 0: banner page enabled (see AH=A4h)
  5430.         1: form feed enabled (see AH=A6h)
  5431.         2-6: reserved (0)
  5432.         7: set flags if 1, get flags if 0
  5433.     BX = logical device number
  5434.         00h-03h = LPT1-LPT4
  5435.         04h-07h = COM1-COM4
  5436. Return: AL = status (see AH=81h)
  5437. Note:    the documentation does not state which register contains the result of
  5438.       a GET
  5439. SeeAlso: AH=A4h,AH=A6h
  5440. ----------17A8-------------------------------
  5441. INT 17 - Alloy MW386 - DEFINE TEMPORARY FILENAME
  5442.     AH = A8h
  5443.     CX:SI -> ASCIZ filename without extension (max 8 chars)
  5444. Return: AL = status (see AH=81h)
  5445. Note:    allows application to specify banner page filename for spool files
  5446.       collected from the application's printer output
  5447. SeeAlso: AH=A9h
  5448. ----------17A9-------------------------------
  5449. INT 17 - Alloy MW386 - CHANGE TEMPORARY SPOOL DRIVE
  5450.     AH = A9h
  5451.     AL = new spool drive (2=C:,3=D:,etc)
  5452. Return: AL = status (see AH=81h)
  5453. Note:    does not remove previous spooling directory since jobs may be pending
  5454. SeeAlso: AH=A8h
  5455. ----------17AA-------------------------------
  5456. INT 17 - Alloy MW386 v2+ - GET REAL-TIME PRINTER STATUS
  5457.     AH = AAh
  5458.     AL = mode
  5459.         00h NTNX
  5460.         DX = NTNX printer number (see AH=88h)
  5461.         01h MW386
  5462.         DX = MW386 printer number
  5463. Return: AH = instantaneous printer status
  5464.         00h printer ready
  5465.         01h not ready
  5466.         12h off line
  5467.         13h out of paper
  5468.         14h general device failure
  5469.         15h device timeout
  5470.         16h bad device number
  5471. ----------17AF-------------------------------
  5472. INT 17 - Alloy MW386 - CHECK SPOOLER
  5473.     AH = AFh
  5474. Return: AX = 55AAh if spooler available
  5475. ----------17C0-------------------------------
  5476. INT 17 - PC Magazine PCSpool - GET CONTROL BLOCK ADDRESS
  5477.     AH = C0h
  5478.     DX = printer port (0-3)
  5479. Return: ES:BX -> control block
  5480. SeeAlso: AH=C1h
  5481. ----------17C1--------------------------------
  5482. INT 17 - PC Magazine PCSpool - BUILD CONTROL RECORD
  5483.     AH = C1h
  5484.     DX = printer port (0-3)
  5485.     DS:SI -> ASCIIZ string to save for display
  5486. Note:    flushes pending writes
  5487. SeeAlso: AH=C0h,AH=C2h
  5488. ----------17C2-------------------------------
  5489. INT 17 - PC Magazine PCSpool - FLUSH PENDING WRITES
  5490.     AH = C2h
  5491.     DX = printer port (0-3)
  5492. SeeAlso: AH=C3h
  5493. ----------17C3-------------------------------
  5494. INT 17 - PC Magazine PCSpool - CANCEL PRINTER QUEUE (FLUSH ALL QUEUED OUTPUT)
  5495.     AH = C3h
  5496.     DX = printer port (0-3)
  5497. SeeAlso: AH=C2h,AH=C7h
  5498. ----------17C4-------------------------------
  5499. INT 17 - PC Magazine PCSpool - QUERY SPOOLER ACTIVE
  5500.     AH = C4h
  5501. Return: DI = B0BFh
  5502.     SI = segment
  5503. ----------17C5-------------------------------
  5504. INT 17 - PC Magazine PCSpool - JOB SKIP PRINTER QUEUE
  5505.     AH = C5h
  5506.     DX = printer port (0-3)
  5507. Note:    cancels up to the pause record 
  5508. ----------17C6-------------------------------
  5509. INT 17 - PC Magazine PCSpool - CHECK PRINTER QUEUE STATUS
  5510.     AH = C6h
  5511.     DX = printer port (0-3)
  5512. Return: AX = 0 printer not active or at pause
  5513.        = 1 printer busy
  5514. ----------17C7-------------------------------
  5515. INT 17 - PC Magazine PCSpool - CLOSE QUEUE
  5516.     AH = C7h
  5517.     DX = printer port (0-3)
  5518. SeeAlso: AH=C3h
  5519. ----------17CD00-----------------------------
  5520. INT 17 - INSET - EXECUTE COMMAND STRING
  5521.     AX = CD00h
  5522.     DS:DX -> ASCIZ command string (max 80 bytes)
  5523. Return: CX = 07C2h (1986d)
  5524. Note:    user interface menus pop up after last command, unless that command
  5525.     exits INSET
  5526. ----------17CD01-----------------------------
  5527. INT 17 - INSET - GET IMAGE SIZE
  5528.     AX = CD01h
  5529.     DS:DX -> ASCIZ name of image file
  5530. Return: AX = height in 1/720th inch
  5531.     BX = width in 1/720th inch
  5532.     CX = 07C2h (1986d)
  5533. ----------17CD02-----------------------------
  5534. INT 17 - INSET - INITIALIZE
  5535.     AX = CD02h
  5536. Return: CX = 07C2h (1986d)
  5537. Note:    all open files are closed and the printer is reset
  5538. SeeAlso: AX=CD04h
  5539. ----------17CD03-----------------------------
  5540. INT 17 - INSET - EXECUTE INSET MENU WITHIN OVERRIDE MODE
  5541.     AX = CD03h
  5542. Return: CX = 07C2h (1986d)
  5543. ----------17CD04-----------------------------
  5544. INT 17 - INSET - INITIALIZE LINKED MODE
  5545.     AX = CD04h
  5546.     ES:DI -> FAR routine for linked mode
  5547. Return: CX = 07C2h
  5548. Note:    calling sequence for linked-mode routine
  5549.     AL = 00h send character in BL to printer
  5550.        = 01h send CX bytes from DS:DX to printer
  5551.        = 02h move print head to horizontal starting position of image
  5552.     return code for linked-mode routine:
  5553.     AX = 0000h success
  5554.        = 0001h failure
  5555. SeeAlso: AX=CD02h,AX=CD08h
  5556. ----------17CD05-----------------------------
  5557. INT 17 - INSET - START MERGING IMAGE INTO TEXT
  5558.     AX = CD05h
  5559.     DS:DX -> ASCIZ name of PIX file
  5560.     CX = left margin of text in 1/720th inch
  5561. Return: AH = printer type
  5562.         00h page-oriented (multiple images may be placed side-by-side)
  5563.         01h line-oriented (use AX=CD06h for vertical paper movement)
  5564.     CX = 07C2h (1986d)
  5565. SeeAlso: AX=CD07h
  5566. ----------17CD06-----------------------------
  5567. INT 17 - INSET - GRAPHICS LINE FEED
  5568.     AX = CD06h
  5569. Return: AH = completion status
  5570.         00h image complete
  5571.         01h image incomplete
  5572.     CX = 07C2h (1986d)
  5573. SeeAlso: AX=CD09h
  5574. ----------17CD07-----------------------------
  5575. INT 17 - INSET - FLUSH GRAPHICS FROM MERGE BUFFER
  5576.     AX = CD07h
  5577. Return: CX = 07C2h
  5578. SeeAlso: AX=CD05h
  5579. ----------17CD08-----------------------------
  5580. INT 17 - INSET - CANCEL LINK MODE
  5581.     AX = CD08h
  5582. Return: CX = 07C2h
  5583. SeeAlso: AX=CD04h
  5584. ----------17CD09-----------------------------
  5585. INT 17 - INSET - ALTER GRAPHICS LINE SPACING
  5586.     AX = CD09h
  5587.     CX = line spacing in 1/720th inch
  5588. Return: CX = 07C2h
  5589. Note:    not yet implemented, line spacing is currently fixed at 1/6 inch
  5590. SeeAlso: AX=CD06h
  5591. ----------17CD0A-----------------------------
  5592. INT 17 - INSET - GET SETUP
  5593.     AX = CD0Ah
  5594.     DS:DX -> buffer for IN.SET data
  5595. Return: CX = 07C2h
  5596. ----------17CD0B-----------------------------
  5597. INT 17 - INSET - START GETTING SCALED IMAGE
  5598.     AX = CD0Bh
  5599.     DS:SI -> ASCIZ pathname of .PIX file
  5600.     BX = number of bitplanes
  5601.     CX = number of rows in output bitmap
  5602.     DX = number of columns in output bitmap
  5603. Return: AX = status
  5604.         0000h OK
  5605.         FFFFh error    
  5606. Note:    image is returned in strips by repeated calls to AX=CD0Ch
  5607. ----------17CD0C-----------------------------
  5608. INT 17 - INSET - GET NEXT IMAGE STRIP
  5609.     AX = CD0Ch
  5610. Return:    AX = status
  5611.         0000h OK but not complete
  5612.         0001h OK and image complete
  5613.         FFFFh error
  5614.     DS:SI -> buffer (max 4K) for bit map strip 
  5615.     CX = start row
  5616.     DX = number of rows
  5617.     BX = offset in bytes between bit planes
  5618. Note:    buffer may be overwritten by subsequent calls
  5619. SeeAlso: AX=CD0Bh
  5620. ----------17F0-------------------------------
  5621. INT 17 - NorthNet Jetstream API - INSTALLATION CHECK
  5622.     AH = F0h
  5623.     DX = printer port (0-3)
  5624. Return: AX = 0001h Jetstream present
  5625.          else  non-Jetstream port
  5626. Note:    NorthNet Jetstream is a high-performance DMA-driven parallel card able
  5627.       to drive printers at up to 80000 characters per second
  5628. ----------17F1-------------------------------
  5629. INT 17 - NorthNet Jetstream API - PRINT DATA BUFFER
  5630.     AH = F1h
  5631.     CX = data buffer length
  5632.     DX = printer port (0-3)
  5633.     DS:SI -> data buffer
  5634. Return: AX = status
  5635.         0000h printer not ready (see also AH=02h)
  5636.         other printing started
  5637. SeeAlso: AH=F2h,AH=F3h,AH=F5h
  5638. ----------17F2-------------------------------
  5639. INT 17 - NorthNet Jetstream API - GET PRINT PROGRESS STATUS
  5640.     AH = F2h
  5641.     DX = printer port (0-3)
  5642. Return: AX = status
  5643.         0000h prior print request finished
  5644.         other number of characters left to print
  5645. SeeAlso: AH=F1h,AH=F3h
  5646. ----------17F3-------------------------------
  5647. INT 17 - NorthNet Jetstream API - ABORT PRINT OPERATION
  5648.     AH = F3h
  5649.     DX = printer port (0-3)
  5650. Return: AX = number of unprinted characters due to abort
  5651. SeeAlso: AH=F1h,AH=F4h
  5652. ----------17F4-------------------------------
  5653. INT 17 - NorthNet Jetstream API - SET COMPLETION (POST) ADDRESS
  5654.     AH = F4h
  5655.     DX = printer port (0-3)
  5656.     DS:DS -> FAR post address (called with interrupts on)
  5657. SeeAlso: AH=F1h,AH=F3h
  5658. ----------17F5-------------------------------
  5659. INT 17 - NorthNet Jetstream API - PRINT DATA BUFFER FROM EXTENDED MEMORY
  5660.     AH = F5h
  5661.     CX = data buffer length
  5662.     DX = printer port (0-3)
  5663.     DS:SI -> data buffer (32-bit physical address)
  5664. Return: AX = status
  5665.         0000h printer not ready (see also AH=02h)
  5666.         other printing started
  5667. SeeAlso: AH=F1h
  5668. ----------18---------------------------------
  5669. INT 18 - START CASSETTE BASIC
  5670. Note:    only PCs produced by IBM contain BASIC in ROM, so the action is
  5671.       unpredicatable on compatibles; this interrupt often reboots the
  5672.       system, and often has no effect at all
  5673. SeeAlso: INT 86"NetBIOS"
  5674. ----------19---------------------------------
  5675. INT 19 - SYSTEM - BOOTSTRAP LOADER
  5676.    Reboot the system without clearing memory or restoring interrupt vectors.
  5677.    Because interrupt vectors are preserved, this interrupt usually causes a
  5678.    system hang if any TSRs have hooked vectors from 00h through 1Ch,
  5679.    particularly INT 08.
  5680.  
  5681.    Usually, the BIOS will try to read sector 1, head 0, track 0 from drive A:
  5682.    to 0000h:7C00h.  If this fails, and a hard disk is installed, the BIOS will
  5683.    read sector 1, head 0, track 0 of the first hard disk.  This sector should
  5684.    contain a master bootstrap loader and a partition table.  After loading the
  5685.    master boot sector at 0000h:7C00h, the master bootstrap loader is given
  5686.    control.  It will scan the partition table for an active partition, and will
  5687.    then load the operating system's bootstrap loader (contained in the first
  5688.    sector of the active partition) and give it control.
  5689.  
  5690.    True IBM PCs issue an INT 18 if neither floppy nor hard disk have a valid
  5691.    boot sector.
  5692.  
  5693. Notes:    to accomplish a warm boot equivalent to Ctrl-Alt-Del, store 1234h in
  5694.       0040h:0072h and jump to FFFFh:0000h.    For a cold boot equivalent to
  5695.       a reset, store 0000h at 0040h:0072h before jumping.
  5696.     VDISK.SYS hooks this interrupt to allow applications to find out how
  5697.       much extended memory has been used by VDISKs (the three bytes at
  5698.       offset 2Ch in the INT 19 handler's segment contain the linear address
  5699.       of the first free extended memory).
  5700.     default handler is at F000h:E6F2h for 100% compatible BIOSes
  5701. SeeAlso: INT 14/AH=17h,INT 18
  5702.  
  5703. Format of hard disk master boot sector:
  5704. Offset    Size    Description
  5705.  00h 446 BYTEs    Master bootstrap loader code
  5706. 1BEh 16 BYTEs    partition record for partition 1 (see below)
  5707. 1CEh 16 BYTEs    partition record for partition 2
  5708. 1DEh 16 BYTEs    partition record for partition 3
  5709. 1EEh 16 BYTEs    partition record for partition 4
  5710. 1FEh    WORD    signature, AA55h indicates valid boot block
  5711.  
  5712. Format of partition record:
  5713. Offset    Size    Description
  5714.  00h    BYTE    boot indicator (80h = active partition)
  5715.  01h    BYTE    partition start head
  5716.  02h    BYTE    partition start sector (bits 0-5)
  5717.  03h    BYTE    partition start track (bits 8,9 in bits 6,7 of sector)
  5718.  04h    BYTE    operating system indicator (see below)
  5719.  05h    BYTE    partition end head
  5720.  06h    BYTE    partition end sector (bits 0-5)
  5721.  07h    BYTE    partition end track (bits 8,9 in bits 6,7 of sector)
  5722.  08h    DWORD    sectors preceding partition
  5723.  0Ch    DWORD    length of partition in sectors
  5724.  
  5725. Values for operating system indicator:
  5726.  00h empty
  5727.  01h DOS 12-bit FAT
  5728.  02h XENIX file system
  5729.  03h XENIX /usr file system (obsolete)
  5730.  04h DOS 16-bit FAT
  5731.  05h DOS 3.3+ extended partition
  5732.  06h DOS Large File System
  5733.  07h QNX, OS/2 HPFS
  5734.  08h AIX bootable partition
  5735.  09h AIX data partition
  5736.  51h Disk Manager
  5737.  52h CP/M
  5738.  56h GB ???
  5739.  61h SpeedStor
  5740.  63h SysV/386
  5741.  64h Novell NetWare
  5742.  75h PC/IX
  5743.  80h Minix v1.3 and below
  5744.  81h Minix v1.5+
  5745.  DBh CP/M
  5746.  E1h SpeedStor 12-bit FAT extended partition
  5747.  E4h SpeedStor 16-bit FAT extended partition
  5748.  FEh LANstep
  5749.  FFh Bad Blocks
  5750. ----------1A00-------------------------------
  5751. INT 1A - TIME - GET SYSTEM TIME
  5752.     AH = 00h
  5753. Return: CX:DX = number of clock ticks since midnight
  5754.     AL = midnight flag, nonzero if midnight passed since time last read
  5755. Notes:    there are approximately 18.2 clock ticks per second, 1800B0h per 24 hrs
  5756.     IBM and many clone BIOSes set the flag for AL rather than incrementing
  5757.       it, leading to loss of a day if two consecutive midnights pass
  5758.       without a request for the time (e.g. if the system is on but idle)
  5759. SeeAlso: AH=01h,AH=02h,INT 21/AH=2Ch
  5760. ----------1A01-------------------------------
  5761. INT 1A - TIME - SET SYSTEM TIME
  5762.     AH = 01h
  5763.     CX:DX = number of clock ticks since midnight
  5764. SeeAlso: AH=00h,AH=03h,INT 21/AH=2Dh
  5765. ----------1A02-------------------------------
  5766. INT 1A - TIME - GET REAL-TIME CLOCK TIME (AT,XT286,PS)
  5767.     AH = 02h
  5768. Return: CF clear if successful
  5769.         CH = hour (BCD)
  5770.         CL = minutes (BCD)
  5771.         DH = seconds (BCD)    
  5772.         DL = daylight savings flag (00h standard time, 01h daylight time)
  5773.     CF set on error (i.e. clock not running or in middle of update)
  5774. SeeAlso: AH=00h
  5775. ----------1A03-------------------------------
  5776. INT 1A - TIME - SET REAL-TIME CLOCK TIME (AT,XT286,PS)
  5777.     AH = 03h
  5778.     CH = hour (BCD)
  5779.     CL = minutes (BCD)
  5780.     DH = seconds (BCD)
  5781.     DL = daylight savings flag (00h standard time, 01h daylight time)
  5782. SeeAlso: AH=01h
  5783. ----------1A04-------------------------------
  5784. INT 1A - TIME - GET REAL-TIME CLOCK DATE (AT,XT286,PS)
  5785.     AH = 04h
  5786. Return: CF clear if successful
  5787.         CH = century (BCD)
  5788.         CL = year (BCD)
  5789.         DH = month (BCD)
  5790.         DL = day (BCD)
  5791.     CF set on error
  5792. SeeAlso: AH=02h,AH=05h,INT 21/AH=2Ah
  5793. ----------1A05-------------------------------
  5794. INT 1A - TIME - SET REAL-TIME CLOCK DATE (AT,XT286,PS)
  5795.     AH = 05h
  5796.     CH = century (BCD)
  5797.     CL = year (BCD)
  5798.     DH = month (BCD)
  5799.     DL = day (BCD)
  5800. SeeAlso: AH=04h,INT 21/AH=2Bh
  5801. ----------1A06-------------------------------
  5802. INT 1A - TIME - SET ALARM (AT,XT286,PS)
  5803.     AH = 06h
  5804.     CH = hour (BCD)
  5805.     CL = minutes (BCD)
  5806.     DH = seconds (BCD)
  5807. Return: CF set on error (alarm already set or clock stopped for update)
  5808.     CF clear if successful
  5809. Note:    the alarm occurs every 24 hours until turned off, invoking INT 4A each
  5810.       time
  5811. SeeAlso: AH=07h,INT 4A
  5812. ----------1A07-------------------------------
  5813. INT 1A - TIME - CANCEL ALARM (AT,XT286,PS)
  5814.     AH = 07h
  5815. Return: alarm disabled
  5816. Note:    does not disable the real-time clock's IRQ
  5817. SeeAlso: AH=06h,INT 70
  5818. ----------1A08-------------------------------
  5819. INT 1A - TIME - SET RTC ACTIVATED POWER ON MODE (CONVERTIBLE)
  5820.     AH = 08h
  5821.     CH = hours in BCD
  5822.     CL = minutes in BCD
  5823.     DH = seconds in BCD
  5824. ----------1A09-------------------------------
  5825. INT 1A - TIME - READ RTC ALARM TIME AND STATUS (CONV,PS30)
  5826.     AH = 09h
  5827. Return: CH = hours in BCD
  5828.     CL = minutes in BCD
  5829.     DH = seconds in BCD
  5830.     DL = alarm status
  5831.         00h alarm not enabled
  5832.         01h alarm enabled but will not power up system
  5833.         02h alarm will power up system
  5834. ----------1A0A-------------------------------
  5835. INT 1A - TIME - READ SYSTEM-TIMER DAY COUNTER (XT2,PS)
  5836.     AH = 0Ah
  5837. Return: CF set on error
  5838.     CF clear if successful
  5839.         CX = count of days since Jan 1,1980
  5840. SeeAlso: AH=04h,AH=0Bh
  5841. ----------1A0B-------------------------------
  5842. INT 1A - TIME - SET SYSTEM-TIMER DAY COUNTER (XT2,PS)
  5843.     AH = 0Bh
  5844.     CX = count of days since Jan 1,1980
  5845. Return: CF set on error
  5846.     CF clear if successful
  5847. SeeAlso: AH=05h,AH=0Ah
  5848. ----------1A3601-----------------------------
  5849. INT 1A - WORD PERFECT 5.0 Third Party Interface - INSTALLATION CHECK
  5850.     AX = 3601h
  5851. Return: DS:SI = routine to monitor keyboard input, immediately preceded by the
  5852.         ASCIZ string "WPCORP\0"
  5853. Notes:    WordPerfect 5.0 will call this interrupt at start up to determine if a
  5854.       third party product wants to interface with it.  The third party
  5855.       product must intercept this interrupt and return the address of a
  5856.       keyboard monitor routine.
  5857.     Before checking for keyboard input, and after every key entered by the
  5858.       user, Word Perfect will call the routine whose address was provided
  5859.       in DS:SI with the following parameters:
  5860.         Entry:    AX = key code or 0
  5861.             BX = WordPerfect state flag
  5862.         Exit:    AX = 0 or key code
  5863.             BX = 0 or segment address of buffer with key codes
  5864.     See the "WordPerfect 5.0 Developer's Toolkit" for further information.
  5865. ----------1A80-------------------------------
  5866. INT 1A - PCjr - SET UP SOUND MULTIPLEXOR
  5867.     AH = 80h
  5868.     AL = 00h source is 8253 channel 2
  5869.          01h source is cassette input
  5870.          02h source is I/O channel "Audio IN"
  5871.          03h source is sound generator chip
  5872. ----------1AA0-------------------------------
  5873. INT 1A - Disk Spool II v??? - INSTALLATION CHECK
  5874.     AH = A0h
  5875. Return: AH = B0h
  5876.     ES = code segment
  5877.     BX -> name of current spool file
  5878.     SI -> current despool file
  5879.     CL = 00h despooler is disabled
  5880.        = 41h despooler is enabled
  5881.     CH = 00h spooler is disabled
  5882.        = 41h spooler is enabled
  5883.     DL = 00h despooler is currently active printing a file
  5884.        = 41h despooler is standing by
  5885. SeeAlso: AH=D0h
  5886. ----------1AAB-------------------------------
  5887. INT 1A - Disk Spool II v1.83 - INSTALLATION CHECK
  5888.     AH = ABh
  5889. Return: ES = code segment
  5890.     BX -> name of current spool file
  5891.     SI -> current despool file
  5892.     CL = ???
  5893.     CH = ???
  5894.     DL = ???
  5895.     DH = 00h ???
  5896.        = 41h ???
  5897.     AL = ???
  5898.     AH = BAh
  5899.     DI = 0000h ???
  5900.          0001h ???
  5901. SeeAlso: AH=ACh,AH=ADh
  5902. ----------1AAC-------------------------------
  5903. INT 1A - Disk Spool II v1.83 - INSTALLATION CHECK
  5904.     AH = ACh
  5905. Return: (see AH=ABh)
  5906. Note:    this function is identical to AH=ABh
  5907. SeeAlso: AH=ABh,AH=ADh
  5908. ----------1AAD-------------------------------
  5909. INT 1A - Disk Spool II v1.83 - FUNCTION CALLS
  5910.     AH = ADh
  5911.     AL = function code
  5912.         02h enable spooler only
  5913.         03h enable the despooler
  5914.         04h disable the despooler
  5915.         08h inhibit popup menu
  5916.         09h enable popup menu
  5917.         0Ah ???
  5918.         0Bh disable the spooler
  5919.         0Ch ???
  5920.         0Dh ???
  5921.         0Eh pop up the menu
  5922.         0Fh ???
  5923.         11h ???
  5924.         14h ???
  5925.         15h ???
  5926.         16h ???
  5927.         17h ???
  5928.         18h ???
  5929.         19h ???
  5930.         20h ???
  5931.         21h    ???
  5932.         22h    ???
  5933.         23h ???
  5934.         30h ???
  5935. Return: AH = 00h if successful
  5936. SeeAlso: AH=ABh
  5937. ----------1AD0-------------------------------
  5938. INT 1A - Disk Spool II v??? - FUNCTION CALLS
  5939.     AH = D0h
  5940.     AL = function code
  5941.         01h enable spooler and despooler
  5942.         02h enable spooler only
  5943.         03h enable despooler at beginning of file
  5944.         04h disable the despooler
  5945.         05h disable the despooler and spooler
  5946.         06h clear the spool file
  5947.         08h inhibit the popup menu
  5948.         09h enable the popup menu
  5949.         0Bh disable the spooler
  5950.         0Ch start despooler after last successfully printed document
  5951.         0Dh start despooler at the exact point where it last left off
  5952.         0Eh pop up the menu
  5953.         20h clear file pointed to by the despooler
  5954. SeeAlso: AH=A0h
  5955. ----------1AFE-------------------------------
  5956. INT 1A - AT&T 6300 - READ TIME AND DATE
  5957.     AH = FEh
  5958. Return: BX = day count (0 = Jan 1, 1984)
  5959.     CH = hour
  5960.     CL = minute
  5961.     DH = second
  5962.     DL = hundredths
  5963. SeeAlso: AH=FFh,INT 21/AH=2Ah,INT 21/AH=2Ch
  5964. ----------1AFF-------------------------------
  5965. INT 1A - AT&T 6300 - SET TIME AND DATE
  5966.     AH = FFh
  5967.     BX = day count (0 = Jan 1, 1984)
  5968.     CH = hour
  5969.     CL = minute
  5970.     DH = second
  5971.     DL = hundredths
  5972. Return: ???
  5973. SeeAlso: AH=FEh,INT 21/AH=2Bh,INT 21/AH=2Dh
  5974. ----------1B---------------------------------
  5975. INT 1B - KEYBOARD - CONTROL-BREAK HANDLER
  5976.    called when INT 09 determines that Control-Break has been pressed
  5977. Note:    normally points to a short routine in DOS which sets the Ctrl-C flag,
  5978.       thus invoking INT 23h the next time DOS checks for Ctrl-C.
  5979. SeeAlso: INT 23
  5980. ----------1C---------------------------------
  5981. INT 1C - TIME - SYSTEM TIMER TICK
  5982.    called on each clock tick by the INT 08 handler
  5983. Note:    preferred interrupt to chain when a program needs to be invoked
  5984.       regularly
  5985. SeeAlso: INT 08
  5986. ----------1D---------------------------------
  5987. INT 1D - SYSTEM DATA - VIDEO PARAMETER TABLES
  5988. Note:    default parameter table at F000h:F0A4h for 100% compatible BIOSes
  5989. SeeAlso: INT 10/AH=00h
  5990.  
  5991. Format of video parameters:
  5992. Offset    Size    Description
  5993.  00h 16 BYTEs    6845 register values for modes 00h and 01h
  5994.  10h 16 BYTEs    6845 register values for modes 02h and 03h
  5995.  20h 16 BYTEs    6845 register values for modes 04h and 05h
  5996.  30h 16 BYTEs    6845 register values for modes 06h and 07h
  5997.  40h    WORD    bytes in video buffer for modes 00h and 01h
  5998.  42h    WORD    bytes in video buffer for modes 02h and 03h
  5999.  44h    WORD    bytes in video buffer for modes 04h and 05h
  6000.  46h    WORD    bytes in video buffer for modes 06h and 07h
  6001.  48h  8 BYTEs    columns on screen for each of modes 00h through 07h
  6002.  50h  8 BYTEs    CRT controller mode bytes for each of modes 00h through 07h
  6003. ----------1E---------------------------------
  6004. INT 1E - SYSTEM DATA - DISKETTE PARAMETERS
  6005. Note:    default parameter table at F000h:EFC7h for 100% compatible BIOSes
  6006. SeeAlso: INT 13/AH=0Fh,INT 41
  6007.  
  6008. Format of diskette parameter table:
  6009. Offset    Size    Description
  6010.  00h    BYTE    first specify byte
  6011.         bits 7-4: step rate
  6012.              3-0: head unload time (0Fh = 240 ms)
  6013.  01h    BYTE    second specify byte
  6014.         bits 7-1: head load time (01h = 4 ms)
  6015.                0: non-DMA mode (always 0)
  6016.  02h    BYTE    delay until motor turned off (in clock ticks)
  6017.  03h    BYTE    bytes per sector (00h = 128, 01h = 256, 02h = 512, 03h = 1024)
  6018.  04h    BYTE    sectors per track
  6019.  05h    BYTE    length of gap between sectors (2Ah for 5.25", 1Bh for 3.5")
  6020.  06h    BYTE    data length (ignored if bytes-per-sector field nonzero)
  6021.  07h    BYTE    gap length when formatting (50h for 5.25", 6Ch for 3.5")
  6022.  08h    BYTE    format filler byte (default F6h)
  6023.  09h    BYTE    head settle time in milliseconds
  6024.  0Ah    BYTE    motor start time in 1/8 seconds
  6025. ----------1F---------------------------------
  6026. INT 1F - SYSTEM DATA - 8x8 GRAPHICS FONT
  6027.    points at 1024 bytes of graphics data, 8 bytes for each character 80h-FFh
  6028. Note:    graphics data for characters 00h-7Fh stored at F000h:FA6Eh in 100%
  6029.       compatible BIOSes
  6030. ---------------------------------------------
  6031.